HttpModule
ASP.NET框架进程,提供.net运行的托管环境,.net的CLR(公共语言运行时)就是寄存在此进程中。
ASP.NET Framework处理一个Http Request的流程:
HttpRequest->inetinfo.exe-->ASPNET_ISAPI.dll-->ASPNET_WP.exe-->HttpRuntime->
HttpApplicationFactory-->HttpApplication-->HttpModule-->HttpHandlerFactory-->
HttpHandler-->HttpHandler.ProcessRequest()
ASP.NET请求处理过程是基于管道模型的,这个管道模型是由多个HttpModule和HttpHandler组
成,ASP.NET 把http请求依次传递给管道中各个HttpModule,最终被HttpHandler处理,处理完成后,再次经过管道中的HTTP模块,把结果返回给
客户端。我们可以在每个HttpModule中都可以干预请求的处理过程。
注意:在http请求的处理过程中,只能调用一个HttpHandler,但可以调用多个HttpModule。
当请求到达HttpModule的时候,系统还没有对这个请求真正处理,但是我们可以在这个请求传递到处理中心(HttpHandler)之前附加一些其它信息,或者截获的这个请求并作一些额外的工作,也或者终止请求等。在HttpHandler处理完请求之后,我们可以再在相应的HttpModule中 把请求处理的结果进行再次加工返回客户端。
//HttpModule
//HTTP模块是实现了System.Web.IhttpModule接口的类。
//IHttpModule接口的声明:
public interface IHttpModule
{
void Init (HttpApplication context);
void Dispose ();
}
//Init 方法:系统初始化的时候自动调用,这个方法允许HTTP模块向HttpApplication 对象中的事件注册自己的事件处理程序。
//Dispose方法: 这个方法给予HTTP模块在对象被垃圾收集之前执行清理的机会。
//HTTP模块可以向System.Web.HttpApplication对象注册下面一系列事件:
//AcquireRequestState 当ASP.NET运行时准备好接收当前HTTP请求的对话状态的时候引发这个事件。
//AuthenticateRequest 当ASP.NET 运行时准备验证用户身份的时候引发这个事件。
//AuthorizeRequest 当ASP.NET运行时准备授权用户访问资源的时候引发这个事件。
//BeginRequest 当ASP.NET运行时接收到新的HTTP请求的时候引发这个事件。
//Disposed 当ASP.NET完成HTTP请求的处理过程时引发这个事件。
//EndRequest 把响应内容发送到客户端之前引发这个事件。
//Error 在处理HTTP请求的过程中出现未处理异常的时候引发这个事件。
//PostRequestHandlerExecute 在HTTP处理程序结束执行的时候引发这个事件。
//PreRequestHandlerExecute 在ASP.NET开始执行HTTP请求的处理程序之前引发这个事件。在这个事件之后,ASP.NET 把该请求转发给适当的HTTP处理程序。
//PreSendRequestContent 在ASP.NET把响应内容发送到客户端之前引发这个事件。这个事件允许我们在内容到达客户端之前改变响应内容。我们可以使用这个事件给页面输出添加用于 所有页面的内容。例如通用菜单、头信息或脚信息。
//PreSendRequestHeaders 在ASP.NET把HTTP响应头信息发送给客户端之前引发这个事件。在头信息到达客户端之前,这个事件允许我们改变它的内容。我们可以使用这个事件在头 信息中添加cookie和自定义数据。
//ReleaseRequestState 当ASP.NET结束所搜有的请求处理程序执行的时候引发这个事件。
//ResolveRequestCache 我们引发这个事件来决定是否可以使用从输出缓冲返回的内容来结束请求。这依赖于Web应用程序的输出缓冲时怎样设置的。
//UpdateRequestCache 当ASP.NET完成了当前的HTTP请求的处理,并且输出内容已经准备好添加给输出缓冲的时候,引发这个事件。这依赖于Web应用程序的输出缓冲是如何 设置的。
//具体实现步骤:
//1.继承HttpModule接口,并且实现Init(HttpApplication context)接口、以及Dispose()接口。
//2.实现Init(HttpApplication context)里面事件的注册。
//3.在web.config配置文件的system.web节点下增加httpModules节点。
代码:下载