2011-06-28 31 views
5

¿Cuál es la mejor manera de crear páginas de error personalizadas en ASP.NET MVC 3? El que estoy particularmente interesado es un error 404, pero también 403, y otros. Soy nuevo en el marco de MVC, tradicionalmente vengo de un fondo de PHP, pero estoy aprendiendo rápidamente.Cómo crear páginas de error 404 personalizadas en ASP.NET MVC 3?

lo hice mi investigación antes de publicar esta pregunta y me encontré con este enlace: Custom error pages on asp.net MVC3

Esta solución parece simple aunque cuando trato de poner en práctica que en mi máquina, aparece un problema con la línea siguiente: IController errorsController = nuevo ErrorsController(); dentro de la función Application_Error(). Dice: "El tipo o espacio de nombres 'ErrorsController' no se pudo encontrar (¿falta una directiva using o una referencia de ensamblado?".

Gracias de antemano por la ayuda que puede ofrecer más.

+0

posible duplicado de [¿Cómo puedo manejar 404 correctamente en ASP.NET MVC?] (Http://stackoverflow.com/questions/619895/how-can-i-properly-handle-404-in-asp-net -mvc) –

Respuesta

15

Debe configurar grupo

<httpErrors> 

sección bajo

<system.webServer> 

sección en su archivo web.config.

favor refiérase a este artículo:

http://www.iis.net/ConfigReference/system.webServer/httpErrors

Además, puede utilizar el controlador de error que se conectó en su pregunta, sin embargo flujo inicial debe ser administrado por IIS. En esta sección, puede indicar a IIS que debe ejecutar las direcciones URL que administra su controlador.

También tenga en cuenta que la respuesta apropiada del string de propiedad de la respuesta en las acciones de su controlador como solución propuesta devuelve "200 OK", lo que puede ser confuso para los navegadores. Por ejemplo

public class ErrorsController : Controller 
{ 
    public ActionResult NotFound() 
    { 
     Response.Status = "404 Not Found"; 
     return View(); 
    } 

    public ActionResult ServerError() 
    { 
     byte[] delay = new byte[1]; 
     RandomNumberGenerator prng = new RNGCryptoServiceProvider(); 

     prng.GetBytes(delay); 
     Thread.Sleep((int)delay[0]); 

     IDisposable disposable = prng as IDisposable; 
     if (disposable != null) { disposable.Dispose(); } 
     Response.Status = "500 Internal Server Error"; 
     return View(); 
    } 

} 

Ejemplo de configuración:

<httpErrors defaultPath="/error.htm" errorMode="Custom" existingResponse="Replace" defaultResponseMode="ExecuteURL"> 
     <remove statusCode="500" subStatusCode="-1" /> 
     <remove statusCode="404" subStatusCode="-1" /> 
     <error statusCode="500" path="/errors/servererror/" responseMode="ExecuteURL" /> 
     <error statusCode="404" path="/errors/notfound/" responseMode="ExecuteURL" /> 
    </httpErrors> 

Puede controlar 404.3 y otra usando "subStatusCode" atributo.

Cuestiones relacionadas