2011-02-11 25 views
6

我需要處理404個異常,而不是所有其他類型的異常。識別這些404例外情況的最佳方式是什麼(區別於其他例外情況)?在ASP.NET中如何識別/處理404例外?

問題是,沒有一個特殊的404錯誤異常類,我得到正常的System.Web.HttpException與消息=「文件不存在」。

我應該只是使用異常的消息或有更好的方法嗎?

謝謝。

+0

處理這種情況?在Global.asax應用程序錯誤處理程序中?在調用另一個ASP.NET應用程序(即Web客戶端)的代碼中? – 2011-02-11 04:28:49

+0

在服務器端的global.asax中處理。 – 2011-02-11 04:37:47

回答

18

你可以試着投例外作爲HttpException,然後使用GetHttpCode方法來檢查它是否是一個404或沒有。

例如:

Exception ex = Server.GetLastError(); 

HttpException httpEx = ex as HttpException; 

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

我建議你配置你的應用程序,將404錯誤重定向到一個特定頁面,例如~/FourOhFour.aspx。在此頁面中,您可以檢查aspxerrorpath querystring參數,該參數將報告用戶嘗試訪問的頁面。從這裏開始,您可以做各種有趣的事情,從登錄404到發送郵件給自己一條消息,嘗試確定正確的URL並自動將用戶重定向到該位置。

要配置Web應用程序給用戶自定義頁面重定向在404面前,將以下標記添加到web.config<system.web>部分:

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

欲瞭解更多信息,請參見:

+0

謝謝。我已經在做所有這些,但這不是問題。我的問題是,即使重定向工作,我仍然需要在那裏處理異常仍然在global.asax拋出。我怎麼知道異常是HTTP 404而不是另一個呢? – 2011-02-11 04:41:19

1

在Web.config文件裏,可以指定一個單獨的文件爲每個錯誤代碼。

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

我已經這樣做了,但我描述的異常仍然拋出,我仍然需要在global.asax中正確處理它。 – 2011-02-11 04:38:40

2

您可以發現異常。你試圖在客戶端應用程序中捕獲這個問題,對嗎?

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

不,這是一個純粹的服務器端:global.asax。我沒有問題發現異常,我的問題是將其識別爲HTTP 404. – 2011-02-11 04:39:38