.NET的錯誤處理機制是:1、【Page_Error】事件;2、ErrorPage屬性;3、【Application_Error】事件;4、【930ac17b94b9e98609d20e97126e0d94】設定項。以上四種處理機制主要用於異常處理和頁面層級錯誤處理。
.NET提供了四個錯誤處理機制:
1.Page_Error事件
Page_Error 事件提供一種捕捉在頁面層級出現的錯誤的方法。您可以只是顯示錯誤訊息(如下面的範例程式碼所示),也可以記錄事件或執行某個其他操作。
private void Page_Load(object sender, System.EventArgs e) { // Put user code to initialize the page here throw new Exception("Page Error!"); } protected void Page_Error(object sender, EventArgs e) { Exception objErr = Server.GetLastError().GetBaseException(); Response.Write("Error:" + objErr.Message); Server.ClearError(); //同样要注意这句代码的使用 }
備註:此範例在瀏覽器中顯示詳細的錯誤訊息,提供此範例只是為了進行說明。向應用程式的最終用戶顯示詳細資訊一定要小心。更適當的做法是向使用者顯示一則訊息,告知已發生錯誤,然後將具體的錯誤詳細資料記錄在日誌中。
2.ErrorPage屬性
你幾乎可以在頁面任何時候設定ErrorPage屬性,從而確定頁面發生錯誤的時候會重定向到哪個頁面。要讓ErrorPage屬性能夠發揮作用,930ac17b94b9e98609d20e97126e0d94配置項中的mode屬性必須設為"On"。
this.ErrorPage = "~/ErrorHandling/PageError.html";
如果Page_Error和ErrorPage都存在,當拋出Exception時,頁面執行順序是怎樣的呢?頁面會先執行Page_Error事件處理函數,如果Page_Error()事件中呼叫函數Server.ClearError()清除異常訊息,則不會跳到ErrorPage屬性指定頁面;如果沒有呼叫Server.ClearError(),Exception資訊會繼續向上拋,頁面會跳到ErrorPage指定頁面。這也證明了優先順序:Page_Error事件>ErrorPage屬性。
3.Application_Error事件
與Page_Error 事件類似,您可以使用Application_Error事件擷取發生在應用程式中的錯誤。由於事件發生在整個應用程式範圍內,因此您可記錄應用程式的錯誤訊息或處理其他可能發生的應用程式層級的錯誤。在Global.asax檔案中加入如下程式碼就OK了。
protected void Application_Error(object sender, EventArgs e) { Exception ex = Server.GetLastError().GetBaseException(); //实际应用中这里可以将Exception信息记Log或是保存到数据库中 //还可以将错误发邮件给网站维护人员 Response.Write("Error:" + ex.Message); //清除Exception,避免继续传递给上一级处理 //这里上级就是<CustomerErrors>配置节了 Server.ClearError(); }
4.930ac17b94b9e98609d20e97126e0d94設定項
設定檔web.config中的930ac17b94b9e98609d20e97126e0d94 設定節,可將重定向頁指定為預設的錯誤頁defaultRedirect或根據引發的HTTP 錯誤代碼指定特定頁。如果發生在應用程式先前的任一層級都未捕獲的錯誤,則顯示此自訂頁面。
<customErrors mode="On" defaultRedirect="~/ErrorHandling/ApplicationError.html"> <error statusCode="404" redirect="~/ErrorHandling/404.html" /> </customErrors>
同樣,如果Application_Error和57eeb7803b8d23e3b64c46876f20d8de同時存在,也存在執行順序的問題。因為優先權Application_Error事件> 930ac17b94b9e98609d20e97126e0d94設定項,所以發生應用程式級錯誤時,優先執行Application_Error事件中的程式碼,如果Application_Error事件中呼叫了Server.ClearError()函數,e8327b06a5e725bf1e338aa91a0e84f6的defaultRedirect不起作用,因為Exception已經被清除;如果Application_Error事件中沒用呼叫了Server.ClearError()函數,錯誤頁會重新定位到defaultRedict指定的URL頁面,為使用者顯示友善出錯訊息。
透過.NET提供的以上四種錯誤處理機制的分析,我們可以把它們從不同的角度分類,以便於我們理解和使用。
1.從功能上分類:用於異常處理(Handling exceptions)是Page_Error事件和Application_Error事件;使用者錯誤頁面重定向(Redirecting the user to an error page)的是ErrorPage屬性和2df2def3fe74498abe887ea5286c390f配置項目。
以上是.net的錯誤處理機制是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!