¿Cuál es la diferencia entre las secciones customErrors
y httpErrors
del archivo web.config en las aplicaciones ASP.NET MVC?
¿Cuáles son las pautas para usar cada sección?
¿Cuál es la diferencia entre las secciones customErrors
y httpErrors
del archivo web.config en las aplicaciones ASP.NET MVC?
¿Cuáles son las pautas para usar cada sección?
Respuestas:
Descargo de responsabilidad: esto es de mi experiencia y no es un hecho comprobado.
Ambos se utilizan para definir el manejo de errores para un sitio web, pero un software diferente se refiere a diferentes elementos de configuración.
customErrors
son un elemento heredado (compatible con versiones anteriores), utilizado por Visual Studio Development Server (también conocido como VSDS o Cassini).
httpErrors
son el nuevo elemento que solo usa IIS7.
Esto resalta el posible problema al desarrollar sitios web ASP.NET mientras se usa VSDS en lugar del IIS local.
Además, consulte esta publicación por mí mismo sobre cómo manejar los mensajes de error con IIS7, si desea tener un control total de la salida de error.
VSDS
- usocustomErrors
IIS6
- usarcustomErrors
IIS7
usar httpErrors
.y si desarrollas con VSDS
pero publicas en IIS7
, supongo que necesitarás ambos.
* Actualizado en abril de 2016
El atributo customErrors se usa cuando el código .net lanza una excepción (404, 403, 500, etc.) y el atributo httpErrors se usa cuando IIS mismo lanza una excepción.
Hay muchas trampas que intentan configurar esto correctamente. Entonces, si está buscando un ejemplo rápido, las 2 mejores opciones que tiene son:
Ejemplo 1: uso de páginas html
<system.web>
<customErrors mode="RemoteOnly" defaultRedirect="/Error500.html" redirectMode="ResponseRewrite">
<error statusCode="403" redirect="/Error403.html" />
<error statusCode="404" redirect="/Error404.html" />
<error statusCode="500" redirect="/Error500.html" />
</customErrors>
</system.web>
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly" existingResponse="Auto">
<remove statusCode="403" />
<remove statusCode="404" />
<remove statusCode="500" />
<error statusCode="403" responseMode="File" path="Error403.html" />
<error statusCode="404" responseMode="File" path="Error404.html" />
<error statusCode="500" responseMode="File" path="Error500.html" />
</httpErrors>
</system.webServer>
Ejemplo 2: uso de páginas aspx
<system.web>
<customErrors mode="RemoteOnly" defaultRedirect="/Error500.html" redirectMode="ResponseRewrite">
<error statusCode="403" redirect="/Error403.aspx" />
<error statusCode="404" redirect="/Error404.aspx" />
<error statusCode="500" redirect="/Error500.aspx" />
</customErrors>
</system.web>
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly" existingResponse="Auto">
<remove statusCode="403" />
<remove statusCode="404" />
<remove statusCode="500" />
<error statusCode="403" responseMode="ExecuteURL" path="Error403.aspx" />
<error statusCode="404" responseMode="ExecuteURL" path="Error404.aspx" />
<error statusCode="500" responseMode="ExecuteURL" path="Error500.aspx" />
</httpErrors>
</system.webServer>
Y en las páginas de error aspx debe hacer algo como esto (ejemplo página 404):
<%
Response.StatusCode = 404;
Response.TrySkipIisCustomErrors = true;
%>
Nota: Usar extensiones menos URL en la sección customErrors es No posible ! . (sin hacks)
Una solución es deshabilitar los errores personalizados y dejar que los errores http manejen la página personalizada. Un amigo ha creado dicha configuración, cuando encuentre algo de tiempo, compartiré el código.
Antecedentes
Una buena página de error personalizada:
Entonces, para aclarar algunas opciones en nuestra configuración:
<customErrors mode="RemoteOnly"
. Puede especificar aquí: On
, Off
, RemoteOnly
.
On
= Mostrar siempre páginas de error personalizadasOff
= Mostrar siempre el error realRemoteOnly
= Muestra el error localmente, pero muestra la página de error personalizada de forma remota. Entonces queremos RemoteOnly
para la declaración 1<customErrors redirectMode="ResponseRewrite"
. Puede especificar aquí: ResponseRedirect
o ResponseRewrite
. El ResponseRedirect
modo redirigirá la página de error a la página de error personalizada. Para un rastreador de enlaces (SEO), esto dará como resultado 302 -> 500, pero desea que el rastreador de enlaces obtenga un error 500.
<httpErrors errorMode="DetailedLocalOnly"
. Este es el equivalente del customErrors
modo. Las opciones que tiene: Custom
, Detailed
, DetailedLocalOnly
.
Una buena publicación de blog que me ayudó mucho es: http://benfoster.io/blog/aspnet-mvc-custom-error-pages
<customErrors>
versus <httpErrors>
<customErrors>
<httpErrors>
Nota: ya no es necesario usar
customErrors
Fuente citada: páginas 404 y de error personalizadas en ASP.NET (excelente artículo)
ExecuteURL
sirve contenido dinámico como una página .aspx (el path
valor debe ser una URL relativa al servidor ):
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="ExecuteURL" >
<remove statusCode="404"/>
<error statusCode="404" responseMode="ExecuteURL" path="/error.aspx" />
</httpErrors>
</system.webServer>
File
sirve un archivo de error personalizado, como una página .html:
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="File" >
<remove statusCode="404"/>
<error statusCode="404" path="404.html" />
</httpErrors>
</system.webServer>
Referencia: Errores HTTP (www.iis.net)
para más detalles, lea el enlace de www.iis.net arriba
it's no loger necesary to use customErrors
y la cita, esta es realmente la información que
La sección de errores en la configuración web es para proporcionar un enfoque de manejo de errores http personalizado, hay dos secciones, una CustomErrors dentro de la sección system.web y otra httpErrors dentro de la sección system.webServer (como se muestra a continuación)
customErrors: esta sección estaba en uso antes de la introducción de IIS 7, IIS 6 5 y antes de usar completamente esta sección para manejar errores http personalizados de acuerdo con el código de estado http.
httpErrors: IIS 7 y posterior usan esta sección, así como la sección customErrors para manejar errores http personalizados basados en sus extensiones de archivo si la extensión de página solicitada se registra con ISAPI dll (.aspx, ashx, .asmx, .svc, etc.) como index.aspx y luego Configuración de recogida de IIS desde la sección customeErrors; de lo contrario, se configura desde httpErrors (el modo alojado de IIS 7 debe configurarse como modo integrado, no clásico)
a continuación se muestran los ejemplos que corresponden al enlace de verificación de manejo de errores 404