ASP.NET頁面錯誤處理


ASP.NET頁面錯誤處理


ASP.NET應用可以再代碼中利用異常捕獲來處理錯誤(try、catch)但是應用出現的所有錯誤,都用異常捕獲來處理是一種不良的編程習慣。try、catch使用簡單,但是過度使用會導致嚴重的性能損失。如果能檢測可能出現不預期情況,應該盡量使用其他方法,而將異常捕獲作為最后考慮的手段,異常捕獲是NET官方提供應用程序處理工具。如果ASP.NET應用程序出現異常,運行時會試圖尋找有意捕獲它的代碼塊,異常會在棧中下上遍歷,直到抵達當前應用程序的起始層,如果在這期間沒有找到合適的處理程序,該異常便成為未處理異常,並使CLR拋出系統異常,用戶會看見報黃頁,應用程序也會隨即終止。
默認的錯誤頁面用戶在本地和遠程計算機看到的典型錯誤頁面是不一樣的。
本地用戶會看到相對詳細的錯誤信息,遠程用戶接收到的信息不會那么詳細。主要是出於安全方面考慮。
ASP.NET提供了兩級全局攔截點,分別位於頁面級和應用程序級,幫助我們以編程的方法處理錯誤。基於基類Page暴露了Error事件,我們可以在頁面中重寫它,捕獲頁面執行期間引發的未處理異常。同樣,HttpApplication類中也有Error事件,用於捕獲整個應用程序中拋出的異常。


頁面級錯誤處理


protected override void OnError(EventArgs e)
{
    Exception ex = Server.GetLastError();
    if(ex is NotImplementedException)
        Server.Transfer("errorpages/notImplemented.aspx");
    else
        Server.Transfer("errorpages/apperror.aspx");
    Server.ClearError();
}


通過Server對象的GetLastError方法,我們獲得被引發的異常。然后傳到特定的頁面,展示給用戶。最后一旦異常處理完成,應用調用ClearError清楚錯誤。


全局錯誤處理

頁面的Error事件處理能夠捕獲特定頁面的錯誤,如果要使組合應用程序的所有頁面共享一套錯誤處理代碼,我們可以在應用程序級創建一段全局錯誤處理程序,便可捕獲所有未處理異常。實現幾乎和頁面級的錯誤處理程序一樣,只不過處理的是代表整個應用程序的HttpApplication對象中的Error事件,為此,我們需要將global.asax文件添加到程序中,並定義Application_Error方法:


protected override void OnError(EventArgs e)
{
    Exception ex = Server.GetLastError();
    if(ex is NotImplementedException)
        Server.Transfer("errorpages/notImplemented.aspx");
    else
        Server.Transfer("errorpages/apperror.aspx");
    Server.ClearError();
}


錯誤的頁面映射


當未處理異常抵達調用棧末端時,ASP.NET會報黃頁,但是我們還可以通過使用應用程序Web.Config文件中的<customErrors>區段,可以對這個功能進行充分的控制。


<configuration>
    <system.web>
        <customErrors mode="Off">
        </customErrors>
    </system.web>
</configuration>


mode屬性用於決定錯誤消息是啟動、關閉還是只顯示給遠程客戶端。
當mode設為RemoteOnly時,遠程用戶會收到一般性的錯誤提示頁面,而本地可以得到詳細的錯誤信息。
當mode設為off時,本地和遠程用戶都會顯示包含詳細錯誤的頁面。
可以自定義錯誤頁面


<configuration>
    <system.web>
        <customErrors mode="Off" defaultRedirect="GenericErrorPage.htm">
        </customErrors>
    </system.web>
</configuration>


如果mode為on時,本地和遠程都將會把defaultRedirect="GenericErrorPage.htm"頁面來代替原來的錯誤報黃頁面,為用戶展示友好的錯誤提示,大多數自定義的錯誤頁面時純HTML編寫的。


常見的HTTP錯誤處理


ASP.NET還使我們能夠針對發生的不同HTTP錯誤顯示相應的自定義頁面。錯誤頁面和特定HTTP狀態之間的映射,可以定義在<customErrors>區段,設置<error>標簽,將HTTP狀態碼

和自定義錯誤頁面關聯起來:


<configuration>
    <system.web>
        <customErrors mode="Off" defaultRedirect="GenericErrorPage.htm">
            <error statusCode="403" redirect="NoAccess.htm"/>
            <error statusCode="404" redirect="FileNotFound.htm"/>
        </customErrors>
    </system.web>
</configuration>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM