我需要處理404個異常,而不是所有其他類型的異常。識別這些404例外情況的最佳方式是什麼(區別於其他例外情況)?在ASP.NET中如何識別/處理404例外?
問題是,沒有一個特殊的404錯誤異常類,我得到正常的System.Web.HttpException與消息=「文件不存在」。
我應該只是使用異常的消息或有更好的方法嗎?
謝謝。
我需要處理404個異常,而不是所有其他類型的異常。識別這些404例外情況的最佳方式是什麼(區別於其他例外情況)?在ASP.NET中如何識別/處理404例外?
問題是,沒有一個特殊的404錯誤異常類,我得到正常的System.Web.HttpException與消息=「文件不存在」。
我應該只是使用異常的消息或有更好的方法嗎?
謝謝。
你可以試着投例外作爲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
}
我建議你配置你的應用程序,將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>
欲瞭解更多信息,請參見:
謝謝。我已經在做所有這些,但這不是問題。我的問題是,即使重定向工作,我仍然需要在那裏處理異常仍然在global.asax拋出。我怎麼知道異常是HTTP 404而不是另一個呢? – 2011-02-11 04:41:19
在Web.config文件裏,可以指定一個單獨的文件爲每個錯誤代碼。
<customErrors mode="Off" defaultRedirect="GenericErrorPage.htm">
<error statusCode="404" redirect="FileNotFound.aspx" />
</customErrors>
我已經這樣做了,但我描述的異常仍然拋出,我仍然需要在global.asax中正確處理它。 – 2011-02-11 04:38:40
您可以發現異常。你試圖在客戶端應用程序中捕獲這個問題,對嗎?
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;
不,這是一個純粹的服務器端:global.asax。我沒有問題發現異常,我的問題是將其識別爲HTTP 404. – 2011-02-11 04:39:38
處理這種情況?在Global.asax應用程序錯誤處理程序中?在調用另一個ASP.NET應用程序(即Web客戶端)的代碼中? – 2011-02-11 04:28:49
在服務器端的global.asax中處理。 – 2011-02-11 04:37:47