¿Cuál es la diferencia entre customErrors y httpErrors?


168

¿Cuál es la diferencia entre las secciones customErrorsy httpErrorsdel archivo web.config en las aplicaciones ASP.NET MVC?

¿Cuáles son las pautas para usar cada sección?


1
En mi humilde opinión: HttpError es un manejo de nivel IIS para mensajes de error, mientras que CustomError es manejo de ASP.Net para errores en la aplicación web. Pero me encantaría saber más ...
Sunny

Respuestas:


85

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.

Resumen:

  • Desarrollando en VSDS- usocustomErrors
  • Publicación del sitio para IIS6- usarcustomErrors
  • Publicación del sitio para IIS7usar httpErrors.

y si desarrollas con VSDSpero publicas en IIS7, supongo que necesitarás ambos.


30
customErrors son para asp.net. httpErrors son para IIS7 y, por lo tanto, manejan contenido que no pasa por el controlador .net (por ejemplo .png, .js, etc.) Si desea páginas de error para tipos de contenido que no son.net, use páginas de error IIS (httpErrors para IIS7 , la interfaz de usuario para IIS6.)
zcrar70

44
Recomiendo instalar y usar IIS 7 Express con Visual Studio para propósitos de depuración. Utilizará las mismas opciones de configuración que IIS 7 normal, a diferencia de Cassini.
Sean

ya no es necesario usar customErrors de @johnB. ¿Y muy necesario? 1.) habilite "Enviar errores al navegador" en la sección "ASP". las Propiedades de depuración 2.) en "Páginas de error / Editar configuración de funciones", seleccione "Errores detallados". 3.) deshabilite "Mostrar mensajes de error HTTP amigables" en IE stackoverflow.com/questions/2640526/…
Kiquenet

136

* 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.

  • / myfakeextensionslessurl -> httpErrors 404
  • /myfakeaspsx.aspx -> customErrors 404
  • /myfakeimage.jpg -> httpErrors 404
  • /throw500.apx -> customErrors 500
  • / throw500 -> customErrors 500

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:

  1. Muestre la verdadera excepción cuando visite la página del problema localmente
  2. Mostrar una página personalizada cuando visita la página del problema de forma remota
  3. No redirigirá, sino que simplemente mostrará el contenido de la página de error (por razones de SEO)
  4. Mostrará el código de estado correcto

Entonces, para aclarar algunas opciones en nuestra configuración:

  1. <customErrors mode="RemoteOnly". Puede especificar aquí: On, Off, RemoteOnly.

    • On = Mostrar siempre páginas de error personalizadas
    • Off = Mostrar siempre el error real
    • RemoteOnly= Muestra el error localmente, pero muestra la página de error personalizada de forma remota. Entonces queremos RemoteOnlypara la declaración 1
  2. <customErrors redirectMode="ResponseRewrite". Puede especificar aquí: ResponseRedirecto ResponseRewrite. El ResponseRedirectmodo 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.

  3. <httpErrors errorMode="DetailedLocalOnly". Este es el equivalente del customErrorsmodo. 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


Qué tipo de relación customErrors - httpErrors e IIS config como "Enviar errores al navegador" en ASP - Propiedades de depuración y "Páginas de error / Editar configuración de funciones", "Errores detallados". ? stackoverflow.com/questions/2640526/…
Kiquenet

36

<customErrors> versus <httpErrors>


<customErrors>

  • todavía disponible en IIS7 +
  • especificar páginas de error personalizadas para solicitudes manejadas por ASP.NET
  • solo maneja solicitudes dentro de la aplicación ASP.NET
  • los archivos estáticos como los archivos HTML o las URL de directorio ("amigable") no se manejan

<httpErrors>

  • introducido en IIS7
  • especificar páginas de error personalizadas para solicitudes manejadas por IIS
  • maneja solicitudes dentro de la aplicación ASP.NET Y / O maneja solicitudes fuera de la aplicación ASP.NET *
  • todos los archivos y URL se manejan *

Nota: ya no es necesario usar customErrors

Fuente citada: páginas 404 y de error personalizadas en ASP.NET (excelente artículo)


ExecuteURLsirve contenido dinámico como una página .aspx (el pathvalor 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


Quizás útil ** stackoverflow.com/questions/2640526/… ** si combina httpErrors con "Enviar errores al navegador" y páginas de error
Kiquenet

3
+1 para la nota it's no loger necesary to use customErrorsy la cita, esta es realmente la información que
buscaba

4

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

httperrors vs customerrors en webconfig, iis, asp.net

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.