No puedo configurar IIS para que sirva mis páginas de error personalizadas para errores fuera de la interconexión de MVC. Si lanzo una excepción dentro de un controlador que todo archivo, el evento Application_Error se encarga de que:Habilitar los errores personalizados en Azure
protected void Application_Error(object sender, EventArgs e)
{
var error = Server.GetLastError();
var routeData = new RouteData();
routeData.Values["Controller"] = "Error";
routeData.Values["Area"] = "";
routeData.Values["Exception"] = error;
if (error is HttpException)
{
switch (((HttpException)error).GetHttpCode())
{
case 401:
routeData.Values["Action"] = "NotAllowed";
break;
case 403:
routeData.Values["Action"] = "NotAllowed";
break;
case 404:
routeData.Values["Action"] = "NotFound";
break;
default:
routeData.Values["Action"] = "ServerError";
break;
}
}
else
{
routeData.Values["Action"] = "ServerError";
}
Response.Clear();
Server.ClearError();
IController controller = new ErrorController();
controller.Execute(new RequestContext(new HttpContextWrapper(((MvcApplication)sender).Context), routeData));
}
Sin embargo, si navego a una URL inexistente, IIS manejar el error 404 (o cualquier otro error), me da el mensaje de error de IIS estándar y ignorando completamente mi configuración web.config:
<system.web>
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="/error">
<error statusCode="401" redirect="/error/notallowed" />
<error statusCode="403" redirect="/error/notallowed" />
<error statusCode="404" redirect="/error/notfound" />
<error statusCode="500" redirect="/error/servererror" />
</customErrors>
</system.web>
<system.webServer>
<httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL">
<clear />
<error statusCode="401" path="/error/notallowed" />
<error statusCode="403" path="/error/notallowed" />
<error statusCode="404" path="/error/notfound" />
<error statusCode="500" path="/error/servererror" />
</httpErrors>
</system.webServer>
/error/* es manejado por un controlador dentro de mi solicitud. ¿Qué puedo hacer para que IIS ejecute la ruta de error personalizada, en lugar de enviarme la página de error estándar?
Esto es ASP.NET MVC 3, ejecutándose en Azure. Tampoco funciona bajo IIS directo, pero el servidor de desarrollo ejecuta el controlador.
Esto es definitivamente extraño. Me ayudó, sin embargo. – xdumaine
Lo mismo aplica para CustomErrors, es decir no coincidirá con nada. Necesita definir explícitamente cada error como se indicó anteriormente: –
Kildareflare