HttpModule内部事件机制和生命周期

HttpModule对HttpApplication实例进行处理,而HttpApplication有很多事件(对应不同的生命周期),这样就衍生出HttpModule内部事件机制和生命周期。

一.HttpModule的事件

BeginRequest     指示请求处理开始

AuthenticateRequest     封装请求身份验证过程

AuthorizeRequest     封装检查是否能利用以前缓存的输出页面处理请求的过程

ResolveRequestCache     从缓存中得到相应时候触发

AcquireRequestState     加载初始化Session时候触发

PreRequestHandlerExecute     在Http请求进入HttpHandler之前触发

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事件。如图:

 

原文地址:https://www.cnblogs.com/AngelLee2009/p/2223014.html