2011-07-13 19 views
8

Estoy intentando agregar páginas de error personalizadas a mi aplicación web. Hasta ahora he añadido esto a mi archivo web.config debajo del elemento:Evite que IIS 7.5 muestre páginas de error predeterminadas utilizando web.config

<customErrors mode="On" > 
    <error statusCode="404" redirect="~/404.aspx"/> 
    <error statusCode="500" redirect="~/500.aspx"/> 
</customErrors> 

Esto funciona bien para los errores que toca .NET, por ejemplo, una dirección URL que contiene la extensión .aspx. Sin embargo, también quiero que se muestren errores personalizados para una URL como www.example.com/dasda

Actualmente, cuando solicito una página como la anterior, IIS 7.5 muestra su propio mensaje de error. He añadido este por debajo del elemento:

<httpErrors > 
    <remove statusCode="404" subStatusCode="-1" /> 
    <error statusCode="404" path="~/404.aspx" responseMode="ExecuteURL" /> 
    <remove statusCode="500" subStatusCode="-1" /> 
    <error statusCode="500" path="~/500.aspx" responseMode="ExecuteURL" /> 
</httpErrors> 

pensé que esto haría que mostrar IIS una página de error personalizada en lugar de su falta de pago, pero esto no parece ser el caso.

Soy consciente de que puedo configurar una página de error personalizada en IIS, pero una solución ideal para mi situación sería tener esta configurable en el web.config.

He intentado agregar esto en mis páginas de error personalizadas en el evento Page_Load como se sugiere here:

  Response.TrySkipIisCustomErrors = true; 

Sin embargo, no impidió que la página por defecto de IIS de mostrar en lugar de mi página de error personalizada. También he intentado lo que se sugiere here:

<httpErrors > 
    <remove statusCode="404" subStatusCode='-1' /> 
    <error statusCode="404" path="~/404.aspx" prefixLanguageFilePath='' responseMode="Redirect" /> 
    <remove statusCode="500" subStatusCode='-1' /> 
    <error statusCode="500" path="~/500.aspx" prefixLanguageFilePath='' responseMode="Redirect" /> 
    </httpErrors> 

Pero esto tampoco ha funcionado.

¿Hay alguna manera de evitar que IIS muestre las páginas de error predeterminadas configurando las configuraciones en el archivo web.config?

Respuesta

14

El problema que estaba encontrando era que por defecto tiene un ErrorMode atributo con el siguiente opciones: DetailedLocalOnly, Custom o Detailed.

Si el atributo errorMode no se especifica como lo estaba haciendo, se establece de forma predeterminada en DetailedLocalOnly (ref). Lo que significa que no habría visto el error personalizado que se mostró.

Las opciones de configuración que trabajaron fueron:

<httpErrors errorMode="Custom"> 
    <remove statusCode="404" subStatusCode='-1' /> 
    <remove statusCode="500" subStatusCode='-1' /> 
    <error statusCode="404" path="/404.aspx" prefixLanguageFilePath="" responseMode="ExecuteURL" /> 
    <error statusCode="500" path="/500.aspx" prefixLanguageFilePath="" responseMode="ExecuteURL" /> 
    </httpErrors> 

El ErrorMode = "Custom" es útil para poner a prueba la costumbre páginas están funcionando correctamente, pero es probablemente más útil cuando la izquierda omitida o establecer explícitamente a ErrorMode = "DetailedLocalOnly "para fines de depuración.

+1

Gracias Aesir por publicar esto. Pude solucionar un problema con tu ejemplo. – GibboK

+2

Esto también resolvió mi problema. ¡Gracias! –

+1

Gracias por descubrir el indicador errorMode; la falta de efecto me molestaba muchísimo. – icelava

0

Creo que necesita obligar a IIS a utilizar CustomErrorModule para cualquier recurso solicitado por el usuario. Trate de añadir el siguiente a su web.config

<modules> 
     <add name="CustomErrorModule" type="customErrorModule" preCondition="" /> 
</modules> 

Tiene también un vistazo al siguiente enlace

https://serverfault.com/questions/53712/in-iis-7-how-do-i-set-up-a-default-error-document-for-any-error

+1

Gracias, ¿qué parte de la web.config debería agregarse? Intenté ponerlo en la sección httpModules y módulos pero ninguno funcionó. – Aesir

+0

Gracias la actualización, pero aún así no funcionó. Me las he arreglado para hacerlo funcionar. – Aesir

Cuestiones relacionadas