2012年1月21日 星期六

ASP .net 客製化錯誤畫面

當你在撰寫ASP.net的程式時,有時候程式會發生你不預期的例外,因而沒有去try .. catch去處理。這時候錯誤畫面就會傳到前端。這對使用者而言不是一個很好的使用經驗。因此,讓使用者看到統一而一致的錯誤畫面會比那ASP.net的黃色畫面好多了。
有時候你是在維護之前人寫得程式,如果要在事後為那些程式碼加上try ... catch這樣工程很浩大。因此,ASP.net提供了一個機制,當你的網站發生未處理的錯誤時,則會自動呼叫Global.asax的Application_Error函數。


   Application_Error函數裡要取得程式發生錯誤的例外,只要呼叫Server.GetLastError().GetBaseException()即可。exception中有用的資訊大概就message和StackTrace這兩個屬性。要取得發生錯誤的網址則用Request.RawUrl。要取得cookie或者form等資訊,則可以利用Request.Params。

程式碼大概就像下面那樣



void Application_Error(object sender, EventArgs e)
{         writeErrorLog(Server.GetLastError().GetBaseException(),Request,Session);
Response.Redirect("error.html")//轉到你要去的錯誤畫面
 
 
void writeErrorLog(Exception ex,System.Web.HttpRequest Request,System.Web.SessionState.HttpSessionState Session)
{
   //這邊你可以做你想做的事情,如紀錄錯誤到資料庫之類的。
}