ASP.NET異常處理

iDotNetSpace發表於2010-04-07

異常捕獲,是我們在Coding過程中必須要考慮的。除了使用Try Catch語句之外,更積極的策略是,對於由輸入可能引發的異常在輸入時就進行驗證。

ASP.NET開發中,可以把異常分成幾個層次:過程級別/頁面級別或類級別/應用程式級別。我們通常會在過程級別就採取措施來捕獲異常並處理,以避免

異常向上擴散。過程級別的異常是會向上冒泡至頁面級別,頁面級別的異常也會冒泡至應用程式級別。

在ASP.NET的架構中,對於頁面級別的異常和應用程式級別的異常都提供了捕獲機制。

  • 頁面級別可以通過Page_error事件處理過程進行捕獲:

public void Page_Error(object sender,EventArgs e)
{
 Exception bjErr = Server.GetLastError().GetBaseException();
 string err = "Error Caught in Page_Error event



" +
   "
Error in:" + Request.Url.ToString() +
   "
Error Message:" + objErr.Message.ToString()+
   "
Stack Trace:
" +
                   objErr.StackTrace.ToString();
 Response.Write(err.ToString());
 Server.ClearError();
}

 

  • 應用程式級別可以通過Application_error事件處理過程進行捕獲:

protected void Application_Error(object sender, EventArgs e)
{
 Exception bjErr = Server.GetLastError().GetBaseException();
 string err = "Error Caught in Application_Error event\n" +
   "Error in:" + Request.Url.ToString() +
   "\nError Message:"+ objErr.Message.ToString() +
   "\nStack Trace:"+ objErr.StackTrace.ToString();
 EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);
 Server.ClearError();
 //additional actions...
}

 

注意:Server.ClearError()的作用是把異常從當前層次中銷燬,避免繼續上向擴散。

 

如果在頁面級別和應用程式級別,異常還是沒有被捕獲。最終將引發應用程式錯誤,這時ASP.NET執行時會採取最後一個步驟來使得程式

異常能以儘可能友好的方式通知客戶端使用者,那就是檢查Web.config中配置節,如果配置了錯誤頁,就自動把響應

導向所配置的錯誤頁。

http://hostName/applicationName/errorStatus.htm" mode="On">

注意:mode屬性有三個可選值:

On:未被處理的異常將使用者重定向到指定的 defaultRedirect 頁。此模式主要用於生產。
Off:使用者收到異常資訊而不是被重定向到 defaultRedirect 頁。此模式主要用於開發。
RemoteOnly:只有在本地計算機上訪問該站點的使用者(通過使用 localhost)才能收到異常資訊。所有其他使用者都被重定向到 defaultRedirect 頁。此模式主要用於除錯。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-631506/,如需轉載,請註明出處,否則將追究法律責任。

相關文章