2012-06-15 21 views
12

Estoy utilizando el código de abajo web.config para redirigir las peticiones a páginas que faltan a una página de gestión de errores 404:404 de redireccionamiento de páginas aspx no

<customErrors mode="On" defaultRedirect="404.aspx" redirectMode="ResponseRewrite"> 
    <error statusCode="404" redirect="404.aspx"/> 
</customErrors> 

Funciona bien cuando busco páginas tales como "desaparecidos .aspx "pero no funciona para páginas sin la extensión" .aspx "como" missing.asp "o simplemente" faltante ". Cuando no funciona, solo carga una página de error estándar de IIS 7.5.

¿Qué estoy haciendo mal? Estoy usando .net 4. Noté que otras personas hacían la misma pregunta pero no obtuvieron una respuesta.

Gracias!

+0

intente quitar 'redirectMode = "ResponseRewrite"' – Damith

+0

He intentado utilizar la información en esta pregunta, pero era no puede hacerlo funcionar. ¿Sería tan amable de echar un vistazo a http://stackoverflow.com/questions/25798775/web-config-not-forwarding-to-404-error-page-on-non-aspx-pages – JGallardo

Respuesta

9

Como dbaseman estados esto se debe a los manipuladores de ASP.NET no son llamados para archivos no ASP.NET. Una manera fácil de forzar al manejador de asp.net a operar en todas las solicitudes es establecer lo siguiente en su web.config.

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
</system.webServer> 

Esto le indica a IIS para ejecutar a través de todos los módulos administrados para todas las solicitudes, como .html, .jpg, css, js, etc. Normalmente, esto se mal visto, ya que sólo presenta un procesamiento adicional y la latencia .

http://www.hanselman.com/blog/BackToBasicsDynamicImageGenerationASPNETControllersRoutingIHttpHandlersAndRunAllManagedModulesForAllRequests.aspx

Otra opción para tratar (limpio que el anterior) fue publicado como una respuesta aquí: https://stackoverflow.com/a/6661699/701062

+1

La última opción que mencionas solucionó mi problema. ¡Gracias! – Osprey

+0

Intenté usar lo que escribiste pero no pude hacerlo funcionar. ¿te importaría echarle un vistazo a http://stackoverflow.com/questions/25798775/web-config-not-forwarding-to-404-error-page-on-non-aspx-pages – JGallardo

+0

Te amo ... entonces mucho Gary S. – BossWalrus

4

La razón es que las extensiones que no son ASPX nunca llegan al controlador ASP.NET; esos errores que ves provienen de IIS. Hay una sección separada httpErrors bajo system.webServer en web.config que deberá configurar para manejar estos errores. Vea here para más información.

Ejemplo del enlace:

<configuration> 
    <system.webServer> 
     <httpErrors errorMode="DetailedLocalOnly" defaultResponseMode="File" > 
     <remove statusCode="500" /> 
     <error statusCode="500" 
      prefixLanguageFilePath="C:\Contoso\Content\errors" 
      path="500.htm" /> 
     </httpErrors> 
    </system.webServer> 
</configuration> 
+0

Agregué el código a continuación, pero ahora en lugar de ejecutar la página de manejo de errores, muestra el código fuente de la página (cuando se intenta cargar una página que no es aspx no existente). ' ' – Osprey

+2

Esta es la mejor respuesta, ya que no depende de enviar todas las solicitudes a través de la canalización de ASP.NET. @Osprey: esto se debe a que el modo de error se establece en "DetailedLocalOnly". Esta configuración dice, hey, si la solicitud proviene de la máquina que aloja los archivos, brinde información detallada, de lo contrario, muestre la página 500 que he definido. Esto es útil para depurar escenarios. Puede cambiar esta configuración a "Personalizar" y siempre mostrará el mensaje de error amigable. – Tommy

+0

Esto no funciona. ¿Y por qué agregaron para 505 cuando la pregunta era específicamente sobre el error 404? – JGallardo

Cuestiones relacionadas