一切福田,不離方寸,從心而覓,感無不通。

Asp.net Web Applicatoin实现自定义HttpModule拦截异常处理

Asp.net的NamePipe机制给我们提供了很多扩展性. 使用HttpModule我们可能实现的有:

  • 强制站点范围的Cookie策略
  • 集中化监控与日志
  • 编写设置与删除HTTP头
  • 控制response输出,如删除多余空白字符
  • Session管理
  • 认证与受权

 

下面我们来看如何实现自定义异常处理:

 

上面的代码实现了IHttpModule接口, 实现基于HttpApplication.Error事件, 接着我们自定义输出了一些信息,包括Form,QueryString. 最后把原来的Error信息清除了,这样你看到以前那个黄页了. 这个自定义的Module可以用于调试Web应用程序使用.

Web.config中配置:

实际开发中,我们可以做的事儿很多,对这些信息记日志,发邮件. 如下, 我们演示使用Enterprise Library 做异常处理并日志记录,部分代码如下:

注意上面的代码, 为了运行代码您需要引用以下程序集

Enterprise Library Share Common Library
Microsoft.Practices.ServiceLocation
Logging Application Block
Exception Handling Application Block
Exception Handling Logging Provider

这里我们使用Fluent API配置, 因此没有配置XML文件. 所以不需要Web.Config中配置任何信息. 代码中有注释. 为了测试我们使用一个PAGE故意Throw 一个ArgumentNullException. 通过Server.GetLastError()获取Exception, 这时由名为MyPolicy策略处理异常. 对于ArgumentNullException把它们记录日志到名为Exception分类中,这个日志文件位于d:\\logs\\
ExceptionLog.log.实际开发你完全按照你的需要来自定义策略.

然后这个日志文件中写出的内容是这样的:

由于我们日志模块我们配置还需要写Rollinglog.log文件,内容如下:

转自:http://www.cnblogs.com/wintersun/archive/2011/11/12/2246513.html