Http Request在整个HttpModule中的生命周期图
广告:
HttpModule对HttpApplication实例进行处理,而HttpApplication有很多事件(对应不同的生命周期),这样就衍生出HttpModule内部事件机制和生命周期。
一.HttpModule的事件
BeginRequest 指示请求处理开始
AuthenticateRequest 封装请求身份验证过程
AuthorizeRequest 封装检查是否能利用以前缓存的输出页面处理请求的过程
ResolveRequestCache 从缓存中得到相应时候触发
--------- 建立HttpHandler控制点, 接着处理(HttpHandler已经建立,此后Session可用)--------
AcquireRequestState 加载初始化Session时候触发
PreRequestHandlerExecute 在Http请求进入HttpHandler之前触发
HttpHandler.ProcessRequest()
--------- 返回到HttpModule接着处理(HttpHandler生命周期结束,Session失效)--------
PostRequestHandlerExecute 在Http请求进入HttpHandler之后触发
ReleaseRequestState 存储Session状态时候触发
UpdateRequestCache 更新缓存信息时触发
EndRequest 在Http请求处理完成的时候触发
PreSendRequestHenaders 在向客户端发送Header之前触发
PreSendRequestConternt 在向客户端发送内容之前触发
------------将处理后的数据返回客户端-------------
说明:
a.BeginRequest和EndRequest分别是HttpModule容器最开始的的和最后的事件;
b.EndRequest之后还会触发PreSendRequestHeaders事件和PreSendRequestContent事件,这不是在HttpModule外的两个事件,表示 HttpModule结束,即将开始向Client发送数据。
二.验证HttpModule生命周期
说明:
a.HttpModule容器会将HttpRequest传送到HttpHandler容器,这个时间点是ResolveRequestCache事件;
b.HttpModule容器会建立HttpHandler实例作为入口—Session从此生效;
c.触发AcquireRequestState事件以及PreRequestHandlerExecute事件;
d.HttpModule容器便将对HttpRequest的控制权限转让给HttpHandler容器;
e.HttpModule容器处理HttpRequest—使用自身的ProcessRequest方法,将对其控件权又还给HttpModule容器—之后Session失效。
三.利用HttpModule实现终止此次HttpRequest请求
在BeginRequest事件中,使用HttpApplication.CompleteRequest()方法,可以实现当满足一定条件时终止此次HttpRequest请求。
Application.CompleteRequest();
说明 :
a.对于一个HttpModule,在BeginRequest中终止,但是仍然会调用EndRequest事件,以及PreSendRequestHeaders事件和PreSendRequestContent事件。也可以说是直接跳转到EndRequest事件,而不会调用这期间的事件;
b.如果有两个HttpModule,在第一个HttpModule的BeginRequest中终止,仅仅不会调用第二个HttpModule的BeginRequest,但仍然会调用两个EndRequest事件,以及PreSendRequestHeaders事件和PreSendRequestContent事件。
广告: