Pregunta

¿Cuál es la diferencia entre el customErrors y httpErrors ¿Secciones del archivo web.config en aplicaciones ASP.NET MVC?

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

¿Fue útil?

Solución

Renuncia: Esto es de mi experiencia y no un hecho comprobado

.

Ambos se utilizan para definir el manejo de un sitio web de error, pero el software diferente se refiere a los diferentes elementos de configuración.

customErrors son un legado elemento (hacia atrás compatible), utilizado por Visual Studio servidor de desarrollo (aka. VSD o Cassini).

httpErrors son el elemento nuevo que sólo se utiliza por IIS7.

Esto pone de relieve la posible problema en el desarrollo de sitios web ASP.NET durante el uso de los VSD en lugar del IIS local.

También, referirse a este mensaje por mí mismo acerca de cómo manejar mensajes de error con IIS7, si desea tener el control total de la salida de error.

Resumen:

  • El desarrollo de VSDS - uso customErrors
  • publicar el sitio en IIS6 - uso customErrors
  • publicar el sitio en IIS7 -. httpErrors uso

y si desarrolla con VSDS pero publica en IIS7, entonces supongo ua necesitan ambos.

Otros consejos

*Actualizado en abril de 2016

El atributo customErrors se usa cuando el código .net genera una excepción (404, 403, 500, etc.) y el atributo httpErrors se usa cuando el propio IIS genera una excepción.

  • /myfakeextensionslessurl --> httpErrores 404
  • /myfakeaspsx.aspx --> errores personalizados 404
  • /miimagenfalsa.jpg --> httpErrores 404
  • /throw500.apx --> errores personalizados 500
  • /throw500 --> errores personalizados 500

Hay muchos problemas al intentar configurar esto correctamente.Entonces, si buscas un ejemplo rápido, las 2 mejores opciones que tienes son:

Ejemplo 1:Usando 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:usando 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 necesitas hacer algo como esto (ejemplo de página 404):

<% 
    Response.StatusCode = 404;
    Response.TrySkipIisCustomErrors = true;
 %>

Nota:Usar URL sin extensión en la sección customErrors es ¡imposible!. (sin trucos)

Una solución alternativa es desactivar los errores personalizados y dejar que los errores http manejen la página personalizada.Un amigo ha creado dicha configuración. Cuando tenga tiempo, compartiré el código.

Fondo

Una buena página de error personalizada:

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

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

  1. <customErrors mode="RemoteOnly".Puedes 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 RemoteOnly para la declaración 1
  2. <customErrors redirectMode="ResponseRewrite".Puedes especificar aquí: ResponseRedirect o ResponseRewrite.El ResponseRedirect El 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.

  3. <httpErrors errorMode="DetailedLocalOnly".Este es el equivalente de la customErrors modo.Opciones que tienes: Custom, Detailed, DetailedLocalOnly.

Una buena publicación de blog que me ayudó mucho es: http://benfoster.io/blog/aspnet-mvc-custom-error-pages

<customErrors> frente <httpErrors>


<customErrors>

  • disponible en IIS7 +
  • especificar las páginas de error personalizadas para solicitudes tramitadas por ASP.NET
  • Sólo se ocupa de las solicitudes dentro de la aplicación ASP.NET
  • archivos estáticos como archivos HTML o directorio ( “amigo”) URL no se manejan

<httpErrors>

  • introducido en IIS7
  • especificar las páginas de error personalizadas para solicitudes tramitadas por IIS
  • maneja las solicitudes dentro de la aplicación ASP.NET Y / O maneja las solicitudes fuera de la - aplicación ASP.NET *
  • todos los archivos y URLs son manejados *
  

Nota: ya no es necesario utilizar customErrors es

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


ExecuteURL sirve contenido dinámico, tal como una página .aspx (el valor path tiene que ser un servidor URL relativa ):

<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 personalizada, 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: HTTP Errores (www.iis.net)

para más detalles, lea el enlace anterior www.iis.net

sección Errores en config web es para proporcionar error HTTP personalizado enfoque manejo hay dos sección, uno customErrors dentro de la sección system.web y otro httpErrors dentro de la sección system.webServer (como se indica a continuación)

customErrors: Esta sección estaba en uso antes de IIS 7 introducido, IIS 6 5 y antes de hacer pleno uso de esta sección para el manejo de errores HTTP personalizado de acuerdo con el código de estado de HTTP.

httpErrors: IIS 7 y versiones posteriores, utilice esta sección, así como customErrors para controlar los errores HTTP personalizado en función de sus extensiones de archivo si la extensión página solicitada se registra en el archivo DLL ISAPI (.aspx, ashx, .asmx .svc etc) como index.aspx continuación, IIS recoger la configuración de customeErrors de lo contrario recoger la configuración de httpErrors (IIS 7 modo de host debe definirse como el estado de ánimo integrado no clásico)

A continuación se los ejemplos que se muestran para el error 404 enlace de verificación manipulación:

httpErrors vs customErrors en webconfig, IIS, asp.net

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top