善用Page_Error處理尷尬場面XD

話說asp.net有完整的例外處理機制

可以當程式設計師的防火牆

再發生很可能會出錯的地方把錯誤捕捉下來

話說asp.net有完整的例外處理機制

可以當程式設計師的防火牆

再發生很可能會出錯的地方把錯誤捕捉下來

讓程式繼續運作

但是try…catch可不是免費的

大家都知道會造成程式效能下降

所以有經驗的工程師都知道基本上該在哪些地方放try…catch

例如發mail、檔案讀寫、資料庫的處理等

但是程式畢竟是人寫的

而人又是常常會犯錯的

總不可能這樣寫吧

   1: protected void Button2_Click(object sender, EventArgs e) {
   2:     try {
   3:         .
   4:         ..
   5:         ...
   6:         ....
   7:         ............所有的code都包在裡面
   8:     } catch (Exception) {
   9:  
  10:         throw;
  11:     }
  12: }
就算客戶不懂code我想也沒有人能昧著良心這樣交差吧XD
沒錯!程式難免會有錯
但是上線後也不能把錯誤訊息給客戶看
總不能把除了有包在try…catch之外的錯誤當成孤兒就遺棄了
我的構想是寫在Page_Error中,但是Page_Error提供的參數不包含Exception物件Orz
後來上網查到可以用Server.GetLastError().GetBaseException()來取得Exception
剛好可以解決這個問題
看code吧
   1: protected void Page_Error(object sender, EventArgs e) {
   2:     string ErrString = string.Empty;
   3:     Exception objErr = Server.GetLastError().GetBaseException();
   4:     ErrString += DateTime.Now.ToString() + "<br/>";
   5:     ErrString += "<b>Error Caught in Page_Error event</b><hr><br>" +
   6:             "<br><b>Error in: </b>" + Request.Url.ToString() +
   7:             "<br><b>Error Message: </b>" + objErr.Message.ToString() +
   8:             "<br><b>Stack Trace:</b><br>" +
   9:                       objErr.StackTrace.ToString();
  10:     Server.ClearError();
  11:     Response.Write(ErrString);
  12: }

原來HttpServerUtility有個GetLastError這個可以取得最後一個錯誤method阿

真是太方便了XD

很適合網站上線後使用,只要把Response.Write(ErrString); 改成發mail給自己就好囉

使用 Visual C# .NET 在 ASP.NET 中建立自訂錯誤報告網頁