简述httpModule与HttpHandler

ASP.NET 请求处理过程是基于管道模型的,这个管道模型是由多个HttpModule和HttpHandler组成,
ASP.NET 把http请求依次传递给管道中各个HttpModule,最终被HttpHandler处理,处理完成后,
再次经过管道中的HTTP模块,把结果返回给 客户端。我们可以在每个HttpModule中都可以干预请求的处理过程。
HttpHandler是一个HTTP请求的真正处理中心,也正是在这个HttpHandler容器中,ASP.NET Framework才真正地对客户端请求的服务器页面做出编译和执行,并将处理过后的信息附加在HTTP请求信息流中再次返回到HttpModule中
HttpModule:可以注册Application管道的事件,比如BeginRequest等,和直接在Global事件里写没啥区别,这样写灵活性更强而已
HttpModule机制:
一个HTTP请求在HttpModule容器的传递过程中,会在某一时刻(ResolveRequestCache(第6个)事件)将这个HTTP请求传递
给HttpHandler容器。在这个事件之后,HttpModule容器会建立一个HttpHandler的入口实例,但是此时并没有
将HTTP请求控制权交出,而是继续触发AcquireRequestState(第9个)事件以及PreRequestHandlerExcute(第11个)事件。
在PreRequestHandlerExcute事件之后,HttpModule窗口就会将控制权暂时交给HttpHandler容器,
以便进行真正的HTTP请求处理工作。
而在HttpHandler容器内部会执行ProcessRequest方法来处理HTTP请求。在容器HttpHandler处理完毕整个
HTTP请求之后,会将控制权交还给HttpModule,HttpModule则会继续对处理完毕的HTTP请求信息流进行
层层的转交动作,直到返回到客户端为止。


它也可实现和Global一样在所有页面请求来之前先访问HttpModule或Golbal的代码
自定义HttpModule步骤:
1、创建一个类实现IHttpModule接口,并实现接口
2、在Init方法写自己需要的方法或事件
3、必须把我们写的类关联到管道上,通过在配置文件里添加

原文地址:https://www.cnblogs.com/xiaoweigogo/p/7792995.html