2010-07-02 7 views
10

Tengo una aplicación web de formularios web C# ASP.NET 4.0 que utiliza Enrutamiento para URL por algún motivo, errores personalizados definidos en la sección system.web de mi web.config se ignora por completo y hará retroceder los errores de IIS.Aplicación ASP.NET alojada en IIS7 que ignora los errores personalizados y vuelve a los errores de IIS

esto se pone totalmente ignorado

<system.web> 
    <customErrors mode="On"> 
     <error statusCode="500" redirect="~/Error" /> 
     <error statusCode="404" redirect="~/404" /> 
     <error statusCode="403" redirect="~/Error" /> 
    </customErrors> 
    </system.web> 

Esta parte se hace cargo de

<system.webServer> 
    <httpErrors> 
     <!--<clear />--> 
     <remove statusCode="500" subStatusCode="-1" /> 
     <remove statusCode="404" subStatusCode="-1" /> 
     <error statusCode="404" subStatusCode="-1" path="/App1/404" responseMode="Redirect" /> 
     <error statusCode="500" prefixLanguageFilePath="" path="/App1/Error" responseMode="Redirect" /> 
    </httpErrors> 
    </system.webServer> 

Esto sería un inconveniente menor, excepto que por el hecho de que caiga de nuevo a nativa de IIS en lugar de mi solicitud de que haya finalizado la elude Elmah registra mis excepciones 404 correctamente.

Editar: sólo para evitar cualquier sugerencia de tales sólo añadí la configuración httpErrors después customErrors dejó de funcionar, así que tendría cualquier cosa.

+2

No hago que esto funcione tan bien. Para los errores 404, parece haber una solución común para usar una "ruta comodín" como se propone aquí: http://stackoverflow.com/questions/2704338/asp-net-4-0-web-forms-routing-default-wildcard -ruta También he notado que la página personalizada 404 entra en acción cuando ingresas una URL incorrecta que termina con '.aspx'. Pero si omito la extensión, se me redirige a la página de error predeterminada de IIS, como la que se ha desclasificado. Y no tengo ni idea de cómo obtener páginas de error personalizadas para otros errores distintos a 404. Tengo curiosidad de cómo terminará su pregunta. – Slauma

+0

Me complace escuchar que esto se ha visto que le sucede a otros, ya que estaba bastante perdido hasta que me di cuenta de cómo configurar httpErrors. –

Respuesta

13

Para desactivar los mensajes de error de IIS que tiene que establecer

Response.TrySkipIisCustomErrors = true; 

en su página de error. Después de eso, sus mensajes de error deberían mostrarse sin problema.

+0

Esto parece más fructífero desde mis iniciales, estoy intentando esto ahora. Buena publicación sobre este tema de Rick Strahl: http://www.west-wind.com/weblog/posts/745738.aspx –

1

¿Ha configurado una ruta para ignorar Error y 404?

+0

Voy a estar del lado de no a menos que puedas hacerlo accidentalmente ya que no tenía intención de hacerlo.¿Qué hace que una ruta se comporte como tal? –

1

Esto se trata en los tutoriales de descripción general de MVC. El comportamiento de los errores de IIS depende de su versión de IIS.

Using ASP.NET MVC with Different Versions of IIS (C#)

+0

No creo que esto sea relevante, estoy usando IIS 7+ en modo integrado. –

8

En lugar de utilizar:

Response.TrySkipIisCustomErrors = true; 

Uso esto en Web.config:

<httpErrors errorMode="Custom" existingResponse="Replace"> 
+1

¿Dónde ves ese primer código? –

+1

en realidad tuve que usar existingResponse = "PassThrough" –

+0

Esta opción funcionó para mí en IIS 8.5. ¡Gracias! –

0

Puede pasar a través de mensajes de error por defecto IIS7 de dos maneras Uno es establecer response.TrySkipIisCustomErrors = true

response.TrySkipIisCustomErrors = true; 
response.Status = response.Status; 

Por alguna razón, TrySkipIisCustomErrors no se respeta si no establece response.Status.

El otro es para establecer existingResponse a "PassThrough" en web.config

<configuration> 
    <system.webServer> 
    <httpErrors existingResponse="PassThrough" /> 
    </system.webServer> 
</configuration> 

pero esto va a ignorar todo listo IIS páginas de error personalizadas.

Cuestiones relacionadas