ASP.NET全局异常处理浅析

开发 后端
本文主要讲述ASP.NET全局异常时的处理方法,希望可以给你带来帮助。

在我们写程序时偶尔会由于疏忽导致有些异常没有进行处理。如果将异常详细信息提示给用户会带来不安全因素,如果不提示详细信息又会给用户报告异常带来麻烦。虽然可以通过配置customErrors mode来实现只有管理员可以查看错误,但发现问题的时间可能会比较长。通过全局异常处理就可以在异常发生时立即记录异常,或直接发送邮件向管理员报告,以在最快的速度发现并处理异常。

要为ASP.NET应用程序添加全局异常处理主要是添加HttpApplication的Error事件的处理。这与在BeginRequest事件中进行URL重写方法类似。先建一个继承System.Web.IHttpModule的类。然后添加Init方法和ShowError方法。

namespace Snowdream
{
public class HttpModule : System.Web.IHttpModule
{
public void Init(System.Web.HttpApplication context)
{
context.Error += new EventHandler(ShowError);
}
private void ShowError(object sender, EventArgs e)
{
//在这里进行异常处理
}
}
}

然后还需要配置web.config的httpModules使之生效。

我现在比较喜欢的做法是将异常的详细信息记录在数据库中,然后返回一个编号,再将页面重定向到自己写的错误提示页,将这个编号提示给用户,用户如果要报告错误只需提供该错误编号,管理员就能在后台中找到错误的详细信息并进行修改。

下面说2个我在做全局异常处理时碰到的问题及我的解决方案:

***个是获取异常hResult,由于是私有属性不能直接访问,解决方法是通过(int)System.Runtime.InteropServices.Marshal.GetHRForException(exception)来获取;

第二个问题是记录了很多不是由于ASP.NET应用程序引发的错误,比如用户键入一个错误的URL,异常处理系统会记录一个“文件不存在。”的错误,而这些错误记录不仅不能真正反映出ASP.NET应用程序的异常反而会给管理员带来更多麻烦。我的解决方法是通过判断if(exception is System.Web.HttpException)来过滤这些HttpException。

【编辑推荐】

  1. ASP.NET MVC实例和新RC版本中视图方面的改进
  2. 在ASP.NET中使用Treeview控件和XML
  3. 如何在ASP.NET中使用SmtpMail发送邮件
责任编辑:杨鹏飞 来源: IT168
相关推荐

2009-07-29 17:20:18

应用程序异常

2009-07-31 12:43:59

ASP.NET MVC

2009-08-05 15:50:13

ASP.NET优点

2009-07-24 13:41:15

ASP.NET AJA

2009-08-05 18:36:12

ASP.NET Che

2009-08-10 13:32:15

ASP.NET TimASP.NET组件设计

2009-07-28 16:40:11

ASP.NET异步页面

2009-08-05 14:46:17

ASP.NET url

2009-07-23 14:31:20

ASP.NET MVC

2009-07-28 15:53:43

ASP.NET Web

2009-07-20 16:23:01

ASP.NET授权模块

2009-08-04 17:00:09

ASP.NET禁用Vi

2009-07-28 13:35:18

2009-07-27 10:18:12

TypeResolveASP.NET

2009-07-24 18:02:46

ASP.NET编程

2009-08-04 17:16:16

ASP.NET代码优化

2009-08-05 16:50:09

ASP.NET For

2009-08-05 16:53:14

ASP.NET组件设计

2009-08-05 13:16:43

ASP.NET URL

2009-08-10 18:19:37

ASP.NET安装环境
点赞
收藏

51CTO技术栈公众号