Asp.Net自訂錯誤頁心得

來源:互聯網
上載者:User

        拋開Try Catch 不說(這種地球人都知道),ASP.NET提供了四種錯誤處理機制,分別為:Page_Error, ErrorPage,Application_Error,<customErrors>四種,如果加上Try Catch就算五種吧,可以理解為:一種局部變數---Try Catch ,兩種頁面級變數:Page_Error, ErrorPage,兩個全域變數:Application_Error,customErrors,在這裡提前說一下他們的執行順序,從高到低排序:Page_Error > ErrorPage > Application_Error >  <customErrors>下面將會按照這四種執行的高低順序做一下詳細的使用介紹。

      首先:Page_Error 大家一看這個詞語,估計大體上就明白了什麼意思了,就是頁面級處理常式,A頁面出錯了,A的Page_Error處理A的錯誤,B頁面出錯了,B的Page_Error處理B的錯誤,大家可以喝try catch一樣理解,只是這個比try catch範圍大了一些,一個方法裡面有try catch,這個方法出錯了,就在catch中處理,一個頁面出錯了,就在Page_Error中處理。

    

       使用方法:在頁面裡面加入此方法即可

      protected void Page_Load(object sender, EventArgs e)

      {

         //錯誤後的操作如:寫日誌,給使用者輸出自己期望的錯誤資訊

      }

     優點:處理比較靈活,對於經常出錯的頁面,直接添加就可以了。

     缺點:他屬於頁面級變數,更多的時候,我們不知道那些頁面會出錯,所以如果使用這種處理方法,需要每個頁面都寫,比較麻煩

 

       第二:ErrorPage 其實ErrorPage 和Page_Error非常類似,大家可以看做是前台js處理,也是頁面級處理常式,但是在這裡不推薦使用,可能是因為習慣問題,個人感覺ASP.NET比asp最方面的地方就是代碼後置,既然這樣,為什麼能寫在背景東西,非要寫在前台呢?呵呵,。。當然,這個也屬於個人習慣,很多東西,必須寫在前台,那是沒辦法的事情,好了扯遠了,下面看一下他的用法

    

        使用方法:在頁面裡面加入此方法即可

         <script language="C#" runat="server">

                  protected void Page_Load(object sender, EventArgs e)

                     {
                          this.ErrorPage = "ErrorPage.htm";
                   }   
        </script>

     優點: 請參考Page_Error 

     缺點:  請參考Page_Error 

 

    第三: Application_Error  看到Application_Error,熟悉ASP.NET的人一眼就知道,它屬於Global.asax中的全域變數,沒錯,它就是一個全域處理機制,我們不僅要問,Application_Error和customErrors都是全域變數,他們有什麼不一致呢?機理上的不一致在這裡就不說了,主要說一下用法上的不一樣,customErrors只能讓你跳到到你想要的頁面,不能記錄錯誤資訊,它會自動處理掉,Application_Error可以接收和處理這些錯誤資訊

  

           使用方法:在Global.asax中處理,Application_Error方法Global會自動就產生了 

   protected void Application_Error(object sender, EventArgs e)

     {

             Exception ex = this.Context.Server.GetLastError();

              if (ex!=null)

              {

              this.Context.Server.Transfer("/Error.aspx");

              //可以再這裡寫日誌,也可以再Error寫日誌,並且展示給使用者一個友好的介面

              this.Context.Response.Clear(); 

              }

      }

 

 

           優點:全域變數,在這裡寫一次,所有的頁面出錯了,都會自動跳轉到錯誤頁面,省時省力,並且可以記錄相關錯誤

          缺點:全域變數的確定大家都明白的,需要消耗一部分的效能

 

    第四:  customErrors 其實customErrors就是Web.config的一個配置項,在這裡配置以後,頁面出錯後,會自動跳轉到相應的錯誤頁面,這種相信大家都用過非常頻繁了。在這裡就簡單介紹一下了

 

       使用方法:

           <system.web>
               <customErrors mode="On" defaultRedirect="GenericErrorPage.htm">
                   <error statusCode="403" redirect="Error403.htm" />
                   <error statusCode="404" redirect="Error404.htm" />  
               </customErrors>
            </system.web>

     優點:對於那些頁面串連不存在,或者程式出錯,給使用者以友好的提示,這個用的是很多的

     缺點:沒法記錄具體錯誤資訊

 

    以上純屬個人觀點,轉載請註明出處

                                            --------------AK:2012-08-29

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.