千家信息网

asp.net开发中常见的公共捕获异常方式有哪些

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要讲解了"asp.net开发中常见的公共捕获异常方式有哪些",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"asp.net开发中常见的公共捕获异
千家信息网最后更新 2026年10月31日asp.net开发中常见的公共捕获异常方式有哪些

这篇文章主要讲解了"asp.net开发中常见的公共捕获异常方式有哪些",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"asp.net开发中常见的公共捕获异常方式有哪些"吧!

1、BasePage类处理方式

在页面的公共基类里重写OnError事件。在前面这篇《asp.net实现非常实用的自定义页面基类》里,楼猪已经贴了代码,就不再费事了。根据经验,很多人开发的时候几乎都这么写,而且对调试和维护还是很有帮助的。需要说明的是,每新添一个页面,其对应类都必须继承自BasePage类异常处理才起作用。

2、Global.asax处理方式

如1中所述,BasePage类的异常处理要求每一个aspx类文件都继承它,适用性和性能显然会打折扣。而Global.asax文件定义了asp.net应用程序中的所有应用程序对象共有的方法、属性和事件,我们可以不采用BasePage的处理方式,在Global.asax里实现Application_Error事件并处理也可以。下面模仿BasePage类里的处理异常方法,实现如下:

/// /// 出错处理:写日志,导航到公共出错页面/// /// /// protected void Application_Error(object sender, EventArgs e){  if (Server.GetLastError() == null) return;  Exception ex = Server.GetLastError().GetBaseException();  string error = this.DealException(ex);  DotNet.Common.Util.Logger.WriteFileLog(error, HttpContext.Current.Request.PhysicalApplicationPath + "LogFile");  if (ex.InnerException != null)  {    error = this.DealException(ex);    DotNet.Common.Util.Logger.WriteFileLog(error, HttpContext.Current.Request.PhysicalApplicationPath + "LogFile");  }  this.Server.ClearError();  this.Response.Redirect("/Error.aspx");}/// /// 处理异常,用来将主要异常信息写入文本日志/// /// /// private string DealException(Exception ex){  this.Application["StackTrace"] = ex.StackTrace;  this.Application["MessageError"] = ex.Message;  this.Application["SourceError"] = ex.Source;  this.Application["TargetSite"] = ex.TargetSite.ToString();  string error = string.Format("URl:{0}\n引发异常的方法:{1}\n错误信息:{2}\n错误堆栈:{3}\n",    this.Request.RawUrl, ex.TargetSite, ex.Message, ex.StackTrace);  return error;}

上面方式的好处是,写一次代码,应用程序发生的大部分异常它都给你捕捉处理了。楼猪要在这里由衷地发一番感慨,感谢ms为我们提供了这么优秀的框架,太省事了吧。

3、IHttpModule接口处理

1和2的处理方式大家都是非常熟悉的,楼猪在实际开发中基本上都是遵循上面两种写法,而且楼猪因为有了2中这种大小通吃的处理方式,甚至已经激动地感谢ms了。但是,在asp.net程序调用线程进行异步处理的时候,容易发生在后台线程或线程池里抛出的异常并不能被1或(和)2完全捕捉到,这就涉及到asp.net下未捕获异常的处理。也就是说楼猪以前做过的很多大小项目中对异常的处理是不完备的。这难道是nc楼猪没有先谢国家种下的恶果吗?感谢国家,感谢ms,感谢博客园,感谢无私的xdjm,感谢自己......

asp.net下未捕获异常的处理步骤如下:

(1)、创建一个实现IHttpModule接口的类

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Text;namespace DotNet.Common.WebForm{  using DotNet.Common.Util;  ///   /// 通用未捕获异常处理   ///   public class AspNetUnhandledExceptionModule : IHttpModule  {    static object syncObj = new object();    static bool isInit = false;    public AspNetUnhandledExceptionModule()    {    }    #region IHttpModule Methods    public void Init(HttpApplication context)    {      lock (syncObj)      {        if (!isInit)        {          AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(OnUnhandledException);          isInit = true;        }      }    }    public void Dispose()    {    }    #endregion    #region OnUnhandledException    void OnUnhandledException(object o, UnhandledExceptionEventArgs e)    {      if (e.ExceptionObject == null) return;      Exception ex = e.ExceptionObject as Exception;      string error = string.Format("引发异常的方法:{0}\n错误信息:{1}\n错误堆栈:{2}\n",              ex.TargetSite, ex.Message, ex.StackTrace);      Logger.WriteFileLog(error, AppDomain.CurrentDomain.BaseDirectory + "LogFile");    }    #endregion  }}

(2)、web.config节点配置

   

最后贴出测试代码:

protected void Page_Load(object sender, EventArgs e){  if (!IsPostBack)  {    System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(Test), null);  }}protected void Test(object state){  int[] numArr = new int[100];  numArr[100] = 100; //异常}

需要说明的是,通过线程或者线程池处理的程序,在发生异常时,每个线程都会有它自己独立的上下文,所以HttpContext对象应尽可能少地出现在异常处理阶段。

感谢各位的阅读,以上就是"asp.net开发中常见的公共捕获异常方式有哪些"的内容了,经过本文的学习后,相信大家对asp.net开发中常见的公共捕获异常方式有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

处理 方式 开发 线程 程序 常见 方法 错误 页面 事件 代码 信息 应用程序 学习 应用 内容 堆栈 大小 对象 接口 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手冲咖啡和咖啡机区别 互联网科技股 广州为想互联网科技有限公司 互联网的科技 厦门中拓互联网络科技有限公司 互联网金融 科技金融 致骋互联网科技 互联网科技ppt模板 阿里巴巴算科技企业还是互联网 互联网科技实习生岗位职责 福州新华互联网科技学校 知乎 青岛科技大学互联网大赛研究生 链环科技传统企业怎么转型互联网 长沙互联网科技 互联网第三次科技革命特征 互联网科技包装股份有限公司上市 保山互联网科技靠谱吗 科技互联网经济论坛 互联网科技创新创业项目 利用互联网等科技手段 互联网的科技 互联网扶贫科技 菲比寻常互联网科技 央行互联网金融科技公司 互联网科技公司实习生 苏州铭阳互联网科技有限公司 有人说阿里系是互联网科技企业 山东蛋芒互联网科技有限公司 互联网领先科技成果宣传视频 黑龙江互联网科技公司
0