2011-02-11 17 views
6

Devo gestire 404 eccezioni in modo diverso rispetto a tutti gli altri tipi di esse. Qual è il modo migliore per identificare le 404 eccezioni (distinguerle da altre eccezioni)?In ASP.NET come identificare/elaborare 404 eccezioni?

Il problema è che non esiste una classe di eccezioni speciale per errori 404, ricevo regolarmente System.Web.HttpException con Message = "Il file non esiste."

Devo usare solo il messaggio di eccezione o esiste un modo migliore?

Grazie.

+0

maniglia dove? Nel gestore degli errori dell'applicazione Global.asax? Nel codice che sta chiamando ad un'altra applicazione ASP.NET (ad esempio, un client Web)? –

+0

Gestire in global.asax sul lato server. –

risposta

18

Si può provare a lanciare l'eccezione come HttpException, e quindi utilizzare il metodo GetHttpCode per verificare se si tratta di un 404 o meno.

Ad esempio:

Exception ex = Server.GetLastError(); 

HttpException httpEx = ex as HttpException; 

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

Eccellente! Grazie! Questo è! –

3

Si consiglia di configurare l'applicazione per reindirizzare gli errori 404 a una pagina specifica, ad esempio ~/FourOhFour.aspx. In questa pagina è possibile esaminare il parametro querystring aspxerrorpath, che segnalerà la pagina che l'utente stava tentando di visitare. Da qui puoi fare ogni sorta di cose interessanti, dal logging 404, alla posta elettronica di te stesso, al tentativo di determinare l'URL corretto e il reindirizzamento automatico all'utente.

Per configurare l'applicazione web per reindirizzare l'utente a una pagina personalizzata a fronte di un 404, aggiungere il seguente codice al web.config nella sezione <system.web>:

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

Per ulteriori informazioni, vedere:

+0

Grazie. Sto già facendo tutto questo, ma questo non è un problema. Il mio problema è che l'eccezione è ancora lanciata in global.asax anche se il redirect ha funzionato e ho bisogno di gestirlo lì. Come posso dire che l'eccezione è HTTP 404 e non l'altra? –

1

nel file web.config è possibile specifiy un file separato per ogni codice di errore.

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

Lo sto già facendo, ma l'eccezione che ho descritto è ancora generata e devo ancora gestirla correttamente in global.asax. –

2

È possibile rilevare l'eccezione. Stai cercando di capirlo in un'applicazione client, corretto?

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, questo è un lato server puro: global.asax. Non ho problemi a rilevare l'eccezione, il mio problema è identificarlo come HTTP 404. –

Problemi correlati