cloudio™

知識要用心體會 才能變成智慧

最新回應

善用Page_Error處理尷尬場面XD

話說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 中建立自訂錯誤報告網頁

2009/6/11 18:46| 閱讀數 : 994 | 1 人收藏 我要推薦 | 4 Comments | 文章分類: ASP.NET C# 訂閱


關連文章

回應

  • jimmyyu 2009/6/11 下午 06:54 回覆

    # re: 善用Page_Error處理尷尬場面XD

    好文,之前看member在Global.asax的Application error時去處理是透過Application變數來傳遞,感覺危險了點,我請他拿掉改用這個方法好了。

  • rachen 2009/6/12 上午 12:11 回覆

    # re: 善用Page_Error處理尷尬場面XD

    在 Global.asax 的 Application_Error ,透過 Server.Transfer
    再透過 Server.GetLastError  ,不用 Application變數 也可以作
    錯誤的擷取^^

        Global.asax
        
        void Application_Error(object sender, EventArgs e) {
                Server.Transfer("~/ErrorPage.aspx");
        }

        
        ErrorPage.aspx.cs

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack && Server.GetLastError() != null) {
                Exception Ex = Server.GetLastError();
                Server.ClearError();
                
                .............
                
      }

        }
  • cloudio 2009/6/12 上午 01:17 回覆

    # re: 善用Page_Error處理尷尬場面XD

    ASP.NET利用Global.asax的Application_Error來記錄Exception訊息

    我一直錯以為Global的app...start是iis啟動,app...end是iis關掉

    所以app...error就是iis掛掉........冏rz......

  • yc421206 2009/6/12 下午 06:40 回覆

    # re: 善用Page_Error處理尷尬場面XD

    分享兩篇

    http://www.dotblogs.com.tw/yc421206/archive/2009/04/27/8195.aspx

    http://www.dotblogs.com.tw/yc421206/archive/2009/04/27/8200.aspx

標題 *
名稱 *
Email (將不會被顯示)
Url
回應
登入後使用進階評論
Please add 5 and 3 and type the answer here: