之前做項目的時候都是在每個頁面中處理這不同的異常資訊,一個頁面數下來,很多個try{}catch{}語句塊,令整個代碼結構有些不夠美觀。
今天看到一篇文章,是關于利用全局應用程式類來幫忙擷取異常資訊,利用 server.Transfer('''')指定接受錯誤的頁面;加上在接受錯誤頁面中利用 server.GetLastError() 擷取前一個異常源。
Global.asax 中的Application_Error 函數如下:
protected void Application_Error(object sender, EventArgs e)
{
//捕獲整個解決方案下的所有異常
try
{
Server.Transfer("~/Error.aspx");
}
catch { }
}
錯誤接受頁面 Error.aspx 擷取異常資訊的相關代碼如下:
Exception ex = Server.GetLastError().GetBaseException(); //擷取異常源
if (ex != null)
{
Response.Write(ex.Message);
}
//清空前一個異常
Server.ClearError();
測試頁面Text.aspx中的測試異常代碼如下:
//測試是否捕獲了異常資訊
//test1
//int UserID = Convert.ToInt32(Request["UserID"].ToString());
//test2
string Name = "aganar";
int UID = Convert.ToInt32(Name);
運作Test.aspx頁面,我們會看到相關的異常資訊,我們能夠清晰地看出,在頁面Test.aspx頁面中未曾有任何一個try{}catch{}語句塊存在,我們即可很友善輕松地捕獲到異常資訊。