Refer:Introduction to HTTP Modules
一个HTTP module是一个ASP.NET程序每次处理请求的时候都会调用的一个程序集。HTTP模块是ASP.NET请求管道的一部分,在整个请求过程中,调用一些列的生命周期事件。利用HTTP Module,可以检查传入的请求;或者基于传入的请求,再添加一些自定义的行为;或者检查响应,并且修改响应。
ASP.NET HTTP 模块类似于ISAPI的过滤器,在每次请求的时候它们都会运行。Http module是用托管代码写的,它们和ASP.NET应用程序的生命周期完全集成。
Http Module的典型应用:
安全认证
可以利用HTTP模块,在被请求的页面,XML Web service或者handler被调用之前,来检查该传入的请求,并且执行自定义的认证方式或者安全校验。
数据统计和记录日志
因为每次请求都会调用HTTP Module,所以我们可以定义一个HTTP Module来执行请求次数的统计或者记录日志
自定义header 和footer
因为可以利用HTTP Module来修改响应内容,所以可以对页面或者XML Web Service的响应注入一些自定义的信息
HTTP Module 注册在Web.config文件中,第一个请求到达服务器时,ASP.NET会构造一个HttpApplication类实例来表示当前应用程序,然后会构造所有在Web.config中注册的HTTP Module的实例,然后每个Module 的Init方法会被调用。在Init 方法里面可以挂载一些生命周期事件,来实现我们自定义的行为。
Global.asax里面也定义了生命周期事件,所以我们也可以把自定义功能写在Global.asax中。如果把Global.asax的程序集放到GAC,并且配置在Machine.config中,就可以让它被许多不同的ASP.NET应用程序来重用。
创建一个HTTP Module的步骤
定义一个类,实现 IHttpModule 接口
在Web.config的<system.web>节点下,配置创建好的HTTP Module