La documentación de MSDN para el elemento customErrors indica que está implementado por System.Web.Configuration.CustomErrorsSection. Si usamos el Reflector .NET de Red Gate para analizar esa clase, podemos ver dónde se usa esa configuración en el Marco.
Es utilizado por System.Web.UI.Page.HandleError y System.Web.HttpResponse.ReportRuntimeError.
Ambos terminan llamando a System.Web.HttpResponse.RedirectToErrorPage.(El nombre de este método es confuso: es importante tener en cuenta que RedirectToErrorPage toma la configuración redirectMode como parámetro, por lo que se llama incluso si está utilizando ResponseRewrite y no ocurre ninguna redirección.)
La parte relevante del RedirectToErrorPage método es:
if (redirectMode == CustomErrorsRedirectMode.ResponseRewrite)
{
this.Context.Server.Execute(url);
}
no parece haber ninguna manera de establecer el código de respuesta en el manejo de errores: al final del día es sólo una Server.Execute llanura. Por lo tanto, parece inevitable que necesite escribir código para lograr la respuesta HTTP que desea.
¿Puede volver a examinar por qué quiere utilizar un archivo .html simple? Esta parece una opción sensata para el manejo de errores, porque no desea pasar por todos los gastos generales de una página .aspx cuando eso podría causar otro error.
¿Pero quizás hay algún terreno intermedio que será tan robusto como un archivo .html?
Por ejemplo, puede hacer un HttpHandler precompilado, registrarlo en la URL /500.error, y luego hacer que 500.error sea su página predeterminada de Redirección. (Esto sería similar a cómo funciona ScriptResource.axd.) Si precompila su módulo en una DLL (a diferencia de la compilación sobre la marcha de un simple archivo .axd antiguo), puede encontrar que es igual de robusto en el cara de las condiciones de error. Si encuentra un error donde ni siquiera esto funcionará, entonces un archivo .html estático probablemente tampoco funcionará: tenga en cuenta que la directiva customErrors todavía se basa en .NET ejecutándose bajo el capó, y aún usa el StaticFileHandler para servir su archivo .html.
Como alternativa, podría considerar un proxy inverso en frente de su aplicación IIS, que serviría una página amigable de 500 incluso ante una falla catastrófica del grupo de aplicaciones. Esto sería más trabajo de configurar, pero sería incluso más sólido que customErrors, p. Ej. si su web.config se daña, incluso customErrors no funcionará.
Usted plantea un buen punto que depende de ASP.NET. Estaba usando 500.html para evitar la dependencia de ASP.NET, pero es discutible si ASP.NET no responde. Creo que mi mejor opción es usar 500.aspx en y tener una copia de seguridad 500.html de la página de error configurada en el nivel de IIS en caso de que ASP.NET no funcione. –
frankadelic