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

ASP.NET全局異常處理淺析

2013-11-13 11:10:57  來源: .NET編程 

  在我們寫程序時偶爾會由於疏忽導致有些異常沒有進行處理如果將異常詳細信息提示給用戶會帶來不安全因素如果不提示詳細信息又會給用戶報告異常帶來麻煩雖然可以通過配置customErrors mode來實現只有管理員可以查看錯誤但發現問題的時間可能會比較長通過全局異常處理就可以在異常發生時立即記錄異常或直接發送郵件向管理員報告以在最快的速度發現並處理異常

  要為ASPNET應用程序添加全局異常處理主要是添加HttpApplication的Error事件的處理這與在BeginRequest事件中進行URL重寫方法類似先建一個繼承SystemWebIHttpModule的類然後添加Init方法和ShowError方法

namespace Snowdream
{
public class HttpModule : SystemWebIHttpModule
{
public void Init(SystemWebHttpApplication context)
{
contextError += new EventHandler(ShowError);
}
private void ShowError(object sender EventArgs e)
{
//在這裡進行異常處理
}
}
}

   然後還需要配置webconfig的httpModules使之生效

  我現在比較喜歡的做法是將異常的詳細信息記錄在數據庫中然後返回一個編號再將頁面重定向到自己寫的錯誤提示頁將這個編號提示給用戶用戶如果要報告錯誤只需提供該錯誤編號管理員就能在後台中找到錯誤的詳細信息並進行修改

  下面說個我在做全局異常處理時碰到的問題及我的解決方案

  第一個是獲取異常hResult由於是私有屬性不能直接訪問解決方法是通過(int)SystemRuntimeInteropServicesMarshalGetHRForException(exception)來獲取

  第二個問題是記錄了很多不是由於ASPNET應用程序引發的錯誤比如用戶鍵入一個錯誤的URL異常處理系統會記錄一個文件不存在的錯誤而這些錯誤記錄不僅不能真正反映出ASPNET應用程序的異常反而會給管理員帶來更多麻煩我的解決方法是通過判斷if(exception is SystemWebHttpException)來過濾這些HttpException


From:http://tw.wingwit.com/Article/program/net/201311/15333.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.