¿Cuál es la diferencia entre customErrors y httpErrors?
-
21-09-2019 - |
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?
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
- usocustomErrors
- publicar el sitio en
IIS6
- usocustomErrors
- 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:
- Muestre la excepción real cuando visite la página del problema localmente
- Mostrar una página personalizada cuando visite la página del problema de forma remota
- No redireccionará, simplemente mostrará el contenido de la página de error (por motivos de SEO)
- Mostrará el código de estado correcto
Entonces, para aclarar algunas opciones en nuestra configuración:
<customErrors mode="RemoteOnly"
.Puedes 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 queremosRemoteOnly
para la declaración 1
<customErrors redirectMode="ResponseRewrite"
.Puedes especificar aquí:ResponseRedirect
oResponseRewrite
.ElResponseRedirect
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.<httpErrors errorMode="DetailedLocalOnly"
.Este es el equivalente de lacustomErrors
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: