當asp.net發生異常或錯誤時,我們是怎麼樣處理錯誤提示頁面?
我總結了下面幾種方式:
i:利用方法Response.Redirect()
看下面2段代碼:
1.
在頁面admin.aspx中發生異常時
try
{
//程式邏輯
}
catch(OverflowException)
{
//在選中的上下文中所進行的算術運算、類型轉換或轉換操作導致溢出時引發的異常
//例如:小於int的MinValue或大於int的MaxValue,異常,轉到出錯誤頁
Response.Redirect("ErrorPage.aspx",true);
}
2.
在開源項目ASP.NET StartKit TimeTracker中
在頁面UserList.aspx中發生邏輯錯誤
if (TTSecurity.IsInRole(TTUser.UserRoleAdministrator) == false)
{
//訪問者的角色不是"Administrator"時,提示角色錯誤頁面
Response.Redirect("AccessDenied.aspx?Index=-1", true);
}
ii.利用設定檔Web.config
我們先設定
<customErrors
mode="On"
defaultRedirect="ErrorPage.aspx"
/>
讓我們先瞭解一下未處理的異常的處理過程:
當引發未處理的異常時發生時,先觸發頁面的Error 事件(從類TemplateControl繼承),再觸發Global中的事件Application_Error,最後系統自動轉向錯誤頁面ErrorPage.aspx
在Fitch and Mather 7.0項目中我們看到了一種增強型的處理方式
見TickerDetail.aspx.cs中代碼
其中有一段代碼如下:
if ( dataTable == null )
{
//當表dataTable == null,拋出HTTP異常
//利用使用 HTTP 錯誤碼和錯誤資訊構造 Exception
throw new System.Web.HttpException( 404, String.Empty );
}
再看看設定檔Web.config中的設定
<customErrors defaultRedirect="error.aspx" mode="On">
<error statusCode="404" redirect="error404.aspx" />
</customErrors>
所以此錯誤發生時,系統會顯示頁面error404.aspx。
System.Net.HttpStatusCode.NotFound等效於 HTTP 狀態 404。NotFound 指示請求的資源不在伺服器上。
HttpStatusCode 枚舉定義為 HTTP 定義的狀態碼的值,具體情況請查看msdn