熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

ASP.NET頁面錯誤處理

2013-11-13 10:29:58  來源: .NET編程 
    ASPNET應用可以再代碼中利用異常捕獲來處理錯誤(trycatch)但是應用出現的所有錯誤都用異常捕獲來處理是一種不良的編程習慣trycatch使用簡單但是過度使用會導致嚴重的性能損失如果能檢測可能出現不預期情況應該盡量使用其他方法而將異常捕獲作為最後考慮的手段異常捕獲是NET官方提供應用程序處理工具如果ASPNET應用程序出現異常運行時會試圖尋找有意捕獲它的代碼塊異常會在棧中下上遍歷直到抵達當前應用程序的起始層如果在這期間沒有找到合適的處理程序該異常便成為未處理異常並使CLR拋出系統異常用戶會看見報黃頁應用程序也會隨即終止
   
    默認的錯誤頁面用戶在本地和遠程計算機看到的典型錯誤頁面是不一樣的
   
    本地用戶會看到相對詳細的錯誤信息遠程用戶接收到的信息不會那麼詳細主要是出於安全方面考慮
   
    ASPNET提供了兩級全局攔截點分別位於頁面級和應用程序級幫助我們以編程的方法處理錯誤基於基類Page暴露了Error事件我們可以在頁面中重寫它捕獲頁面執行期間引發的未處理異常同樣HttpApplication類中也有Error事件用於捕獲整個應用程序中拋出的異常
   
    頁面級錯誤處理
   
    protected override void OnError(EventArgs e)
   
    {
   
    Exception ex = ServerGetLastError()
   
    if(ex is NotImplementedException)
   
    ServerTransfer(errorpages/notImplementedaspx
   
    else
   
    ServerTransfer(errorpages/apperroraspx
   
    ServerClearError()
   
    }
   
    通過Server對象的GetLastError方法我們獲得被引發的異常然後傳到特定的頁面展示給用戶最後一旦異常處理完成應用調用ClearError清楚錯誤
   
    全局錯誤處理
   
    頁面的Error事件處理能夠捕獲特定頁面的錯誤如果要使組合應用程序的所有頁面共享一套錯誤處理代碼我們可以在應用程序級創建一段全局錯誤處理程序便可捕獲所有未處理異常實現幾乎和頁面級的錯誤處理程序一樣只不過處理的是代表整個應用程序的HttpApplication對象中的Error事件為此我們需要將globalasax文件添加到程序中並定義Application_Error方法
   
    protected override void OnError(EventArgs e)
   
    {
   
    Exception ex = ServerGetLastError()
   
    if(ex is NotImplementedException)
   
    ServerTransfer(errorpages/notImplementedaspx
   
    else
   
    ServerTransfer(errorpages/apperroraspx
   
    ServerClearError()
   
    }
   
    錯誤的頁面映射
   
    當未處理異常抵達調用棧末端時ASPNET會報黃頁但是我們還可以通過使用應用程序WebConfig文件中的<customErrors>區段可以對這個功能進行充分的控制
   
    <configuration>
   
    <systemweb>
   
    <customErrors mode=Off>
   
    </customErrors>
   
    </systemweb>
   
    </configuration>
   
    mode屬性用於決定錯誤消息是啟動關閉還是只顯示給遠程客戶端
   
    當mode設為RemoteOnly時遠程用戶會收到一般性的錯誤提示頁面而本地可以得到詳細的錯誤信息
   
    當mode設為off時本地和遠程用戶都會顯示包含詳細錯誤的頁面
   
    可以自定義錯誤頁面
   
    <configuration>
   
    <systemweb>
   
    <customErrors mode=Off defaultRedirect=>
   
    </customErrors>
   
    </systemweb>
   
    </configuration>
   
    如果mode為on時本地和遠程都將會把defaultRedirect=頁面來代替原來的錯誤報黃頁面為用戶展示友好的錯誤提示大多數自定義的錯誤頁面時純HTML編寫的
   
    常見的HTTP錯誤處理
   
    ASPNET還使我們能夠針對發生的不同HTTP錯誤顯示相應的自定義頁面錯誤頁面和特定HTTP狀態之間的映射可以定義在<customErrors>區段設置<error>標簽將HTTP狀態碼
   
    和自定義錯誤頁面關聯起來
   
    <configuration>
   
    <systemweb>
   
    <customErrors mode=Off defaultRedirect=>
   
    <error statusCode= redirect=/>
   
    <error statusCode= redirect=/>
   
    </customErrors>
   
    </systemweb>
   
    </configuration>
From:http://tw.wingwit.com/Article/program/net/201311/13824.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.