2011-02-11 17 views
6

Necesito manejar 404 excepciones de manera diferente a todos los demás tipos de ellas. ¿Cuál es la mejor manera de identificar esas excepciones 404 (distinguirlas de otras excepciones)?En ASP.NET cómo identificar/procesar excepciones 404?

El problema es que no hay una clase de excepción especial para errores 404, obtengo System.Web.HttpException regular con Message = "El archivo no existe".

¿Debo simplemente utilizar el mensaje de excepción o hay una manera mejor?

Gracias.

+0

manija dónde? En el controlador de errores de la aplicación Global.asax? ¿En el código que está llamando a otra aplicación ASP.NET (es decir, un cliente web)? –

+0

Manejar en global.asax en el lado del servidor. –

Respuesta

18

Usted puede tratar de lanzar la excepción como un HttpException, y luego usar el método GetHttpCode para comprobar si se trata de un 404 o no.

Por ejemplo:

Exception ex = Server.GetLastError(); 

HttpException httpEx = ex as HttpException; 

if (httpEx != null && httpEx.GetHttpCode() == 404) 
{ 
    //do what you want for 404 errors 
} 
+0

¡Excelente! ¡Gracias! ¡Eso es todo! –

3

Le sugiero que configure su aplicación para redirigir los errores 404 a una página específica, como ~/FourOhFour.aspx. En esta página puede inspeccionar el parámetro aspxerrorpath querystring, que informará la página que el usuario estaba intentando visitar. Desde aquí puede hacer todo tipo de cosas interesantes, desde iniciar sesión en el 404, enviarse un mensaje por correo electrónico hasta intentar determinar la URL correcta y redirigir automáticamente al usuario a eso.

Para configurar la aplicación web para redirigir al usuario a una página personalizada en la cara de un 404, añadir el siguiente código a web.config en la sección <system.web>:

<customErrors mode="On" defaultRedirect="~/GeneralError.aspx"> 
    <error statusCode="404" redirect="~/FourOhFour.aspx" /> 
</customErrors> 

Para obtener más información, ver:

+0

Gracias. Ya estoy haciendo todo eso, pero esto no es un problema. Mi problema es que todavía se lanza la excepción en global.asax incluso si el redireccionamiento funcionó y necesito manejarlo allí. ¿Cómo puedo saber que la excepción es HTTP 404 y no la otra? –

1

en el archivo Web.config puede specifiy un archivo separado para cada código de error.

<customErrors mode="Off" defaultRedirect="GenericErrorPage.htm"> 
     <error statusCode="404" redirect="FileNotFound.aspx" /> 
    </customErrors> 
+0

Ya estoy haciendo esto, pero la excepción que describí aún se lanza y aún necesito manejarla correctamente en global.asax. –

2

Puede encontrar la excepción. Intenta atrapar esto en una aplicación cliente, ¿correcto?

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(someURL); 
try 
{ 
    HttpWebResponse resp = req.GetResponse(); 
} 
catch(WebException webEx) 
{ 
    if(webEx.Response != null) 
    { 
     HttpWebResponse response = webEx.Response as HttpWebResponse; 
     switch(response.StatusCode) 
     { 
     case HttpStatusCode.NotFound: 
      // do something 
      break; 
+0

No, este es un lado puro del servidor: global.asax. No tengo problemas para detectar la excepción, mi problema es identificarlo como HTTP 404. –

Cuestiones relacionadas