1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
using System.Web;
5
namespace HttpModuleTest1
6

{
7
public class Test1Module:IHttpModule
8
{
9
public Test1Module()
10
{
11
}
12
public string ModuleName
13
{
14
get
15
{
16
return "Test1Module";
17
}
18
}
19
public void Init(HttpApplication application)
20
{
21
application.BeginRequest += new EventHandler(myBeginRequest);
22
application.EndRequest += new EventHandler(myEndRequest);
23
application.PreRequestHandlerExecute += new EventHandler(myPreRequestHandlerExecute);
24
application.PostRequestHandlerExecute += new EventHandler(myPostRequestHandlerExecute);
25
application.ReleaseRequestState += new EventHandler(myReleaseRequestState);
26
application.AcquireRequestState += new EventHandler(myAcquireRequestState);
27
application.AuthenticateRequest += new EventHandler(myAuthenticateRequest);
28
application.AuthorizeRequest += new EventHandler(myAuthorizeRequest);
29
application.ResolveRequestCache += new EventHandler(myResolveRequestCache);
30
application.PreSendRequestHeaders += new EventHandler(myPreSendRequestHeaders);
31
application.PreSendRequestContent += new EventHandler(myPreSendRequestContent);
32
}
33
private void myBeginRequest(object source, EventArgs e)
34
{
35
HttpApplication application = (HttpApplication)source;
36
HttpContext context = application.Context;
37
context.Response.Write("Test1Module:Beggining of Request<br>");
38
}
39
private void myEndRequest(object source, EventArgs e)
40
{
41
HttpApplication application = (HttpApplication)source;
42
HttpContext context = application.Context;
43
context.Response.Write("Test1Module:End of Request<br>");
44
}
45
private void myPreRequestHandlerExecute(object source, EventArgs e)
46
{
47
HttpApplication application = (HttpApplication)source;
48
HttpContext context = application.Context;
49
context.Response.Write("Test1Module:Application_RequestHandlerExecute:<br>");
50
}
51
private void myPostRequestHandlerExecute(object source, EventArgs e)
52
{
53
HttpApplication application = (HttpApplication)source;
54
HttpContext context = application.Context;
55
context.Response.Write("Test1Module:Application_PostRequestHandlerExecute:<br>");
56
}
57
private void myReleaseRequestState(object source, EventArgs e)
58
{
59
HttpApplication application = (HttpApplication)source;
60
HttpContext context = application.Context;
61
context.Response.Write("Test1Module:Application_ReleaseRequestState:<br>");
62
}
63
private void myAcquireRequestState(object source, EventArgs e)
64
{
65
HttpApplication application = (HttpApplication)source;
66
HttpContext context = application.Context;
67
context.Response.Write("Test1Module:Application_ReleaseRequestState:<br>");
68
}
69
private void myAuthenticateRequest(object source, EventArgs e)
70
{
71
HttpApplication application = (HttpApplication)source;
72
HttpContext context = application.Context;
73
context.Response.Write("Test1Module:Application_AuthenticateRequest:<br>");
74
}
75
private void myAuthorizeRequest(object source, EventArgs e)
76
{
77
HttpApplication application = (HttpApplication)source;
78
HttpContext context = application.Context;
79
context.Response.Write("Test1Module:Application_AuthorizeRequest:<br>");
80
}
81
private void myResolveRequestCache(object source, EventArgs e)
82
{
83
HttpApplication application = (HttpApplication)source;
84
HttpContext context = application.Context;
85
context.Response.Write("Test1Module:Application_ResolveRequestCache:<br>");
86
}
87
private void myPreSendRequestHeaders(object source, EventArgs e)
88
{
89
HttpApplication application = (HttpApplication)source;
90
HttpContext context = application.Context;
91
context.Response.Write("Test1Module:Application_PreSendRequestHeaders:<br>");
92
}
93
private void myPreSendRequestContent(object source, EventArgs e)
94
{
95
HttpApplication application = (HttpApplication)source;
96
HttpContext context = application.Context;
97
context.Response.Write("Test1Module:Application_PreSendRequestContent:<br>");
98
}
99
public void Dispose()
100
{
101
}
102
}
103
}
然后在web.config里添加,不明白的看注释部分。
<httpModules>
<!--注意我这里的Httplibrary是你添加引用的那个DLL的文件名.Httplibrary.SecurityModules
中前边部分是你那个类的名称空间,后边的是你建的类的名字。-->
<add name=" Test1 " type="Httplibrary.SecurityModules,Httplibrary"/>
<add name=" MultiTest1 " type="HttpModuleTest1.Test1Module, HttpModuleTest1" />
<add name=" MultiTest2" type="HttpModuleTest2.Test2Module, HttpModuleTest2" />
</httpModules>
还是用刚才那个测试页面,我们就可以观察到两个test的执行顺序。
我们具体分析一下就是这样的:
HttpRequest开始->进入HttpModule->HttpModule->
首次截获HttpRequest->HttpModule.BeginRequest->
HttpModule.AuthorizeRequest->HttpModule.ResolveRequestCache->
初始化HttpHandler->建立HttpHandler控制点->HttpModule继续处理。HttpHandler已经建立,此后Session可用->HttpModule.AcquireRequestState
->HttpModule.PreRequestHandlerExecute->进入HttpHandler处理HttpRequest
->HttpHandler->HttpHandler.ProcessRequest->返回HttpModule,HttpHandler结束,Session失效->HttpModule.PostRequestHandlerExecute->HttpModule.ReleaseRequestState->
HttpModule.UpdateRequestCache->HttpModule.EndRequest->HttpModule.PreSendRequestHeaders->HttpModule.PreSendRequestContent->
将处理的数据返回客户端,处理结束。