HttpModule是如何工作的
当一个HTTP请求到达HttpModule时,整个ASP.NET Framework系统还并没有对这个HTTP请求做任何处理,也就是说此时对于HTTP请求来讲,HttpModule是一个HTTP请求的“必经之路”,所以可以在这个HTTP请求传递到真正的请求处理中心(HttpHandler)之前附加一些需要的信息在这个HTTP请求信息之上,或者针对截获的这个HTTP请求信息作一些额外的工作,或者在某些情况下干脆终止满足一些条件的HTTP请求,从而可以起到一个Filter过滤器的作用。
示例1:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
1
using System;
2![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
using System.Collections.Generic;
4![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
using System.Text;
6![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
using System.Web;
8![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
10![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
namespace MyHttpModule
12![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
13![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
14![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
15![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
16![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
17
/// 说明:用来实现自己的HttpModule类。
18![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
19
/// 作者:文野
20![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
21
/// 联系:stwyhm@cnblogs.com
22![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
23
/// </summary>
24![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
25
public class MyFirstHttpModule : IHttpModule
26![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
27![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
28![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
29
private void Application_BeginRequest(object sender, EventArgs e)
30![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
31![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
32![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
33
HttpApplication application = (HttpApplication)sender;
34![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
35
HttpContext context = application.Context;
36![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
37
HttpRequest request = application.Request;
38![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
39
HttpResponse response = application.Response;
40![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
41
42![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
43
response.Write("我来自自定义HttpModule中的BeginRequest<br />");
44![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
45
}
46![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
47
48![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
49
private void Application_EndRequest(object sender, EventArgs e)
50![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
51![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
52![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
53
HttpApplication application = (HttpApplication)sender;
54![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
55
HttpContext context = application.Context;
56![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
57
HttpRequest request = application.Request;
58![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
59
HttpResponse response = application.Response;
60![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
61
62![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
63
response.Write("我来自自定义HttpModule中的EndRequest<br />");
64![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
65
}
66![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
67
68![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
69![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
IHttpModule 成员#region IHttpModule 成员
70![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
71
72![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
73
public void Dispose()
74![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
75![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{}
76![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
77
78![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
79
public void Init(HttpApplication application)
80![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
81![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
82![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
83
application.BeginRequest += new EventHandler(Application_BeginRequest);
84![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
85
application.EndRequest += new EventHandler(Application_EndRequest);
86![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
87
}
88![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
89
90![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
91
#endregion
92![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
93
}
94![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
95
}在Web.config进行如下配置
<add name="MyFirstHttpModule" type="MyHttpModule.MyFirstHttpModule,MyHttpModule"/>
深入了解HttpModule
一个HTTP请求在HttpModule容器的传递过程中,会在某一时刻(ResolveRequestCache事件)将这个HTTP请求传递给HttpHandler容器。在这个事件之后,HttpModule容器会建立一个HttpHandler的入口实例,但是此时并没有将HTTP请求控制权交出,而是继续触发AcquireRequestState事件以及PreRequestHandlerExcute事件。在PreRequestHandlerExcute事件之后,HttpModule窗口就会将控制权暂时交给HttpHandler容器,以便进行真正的HTTP请求处理工作。
而在HttpHandler容器内部会执行ProcessRequest方法来处理HTTP请求。在容器HttpHandler处理完毕整个HTTP请求之后,会将控制权交还给HttpModule,HttpModule则会继续对处理完毕的HTTP请求信息流进行层层的转交动作,直到返回到客户端为止。
![](https://images.cnblogs.com/cnblogs_com/stwyhm/HttpModule/HttpModuleLife.jpg)
图1:HttpModule生命周期示意图
示例2:验证HttpModule生命周期
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
1
using System;
2![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
using System.Collections.Generic;
4![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
using System.Text;
6![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
using System.Web;
8![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
10![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
namespace MyHttpModule
12![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
13![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
14![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
15
public class ValidaterHttpModule : IHttpModule
16![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
17![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
18![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
19![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
IHttpModule 成员#region IHttpModule 成员
20![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
21
22![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
23
public void Dispose()
24![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
25![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{}
26![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
27
28![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
29
public void Init(HttpApplication application)
30![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
31![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
32![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
33
application.BeginRequest += new EventHandler(application_BeginRequest);
34![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
35
application.EndRequest += new EventHandler(application_EndRequest);
36![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
37
application.PreRequestHandlerExecute += new EventHandler(application_PreRequestHandlerExecute);
38![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
39
application.PostRequestHandlerExecute += new EventHandler(application_PostRequestHandlerExecute);
40![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
41
application.ReleaseRequestState += new EventHandler(application_ReleaseRequestState);
42![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
43
application.AcquireRequestState += new EventHandler(application_AcquireRequestState);
44![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
45
application.AuthenticateRequest += new EventHandler(application_AuthenticateRequest);
46![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
47
application.AuthorizeRequest += new EventHandler(application_AuthorizeRequest);
48![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
49
application.ResolveRequestCache += new EventHandler(application_ResolveRequestCache);
50![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
51
application.PreSendRequestHeaders += new EventHandler(application_PreSendRequestHeaders);
52![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
53
application.PreSendRequestContent += new EventHandler(application_PreSendRequestContent);
54![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
55
}
56![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
57
58![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
59
void application_PreSendRequestContent(object sender, EventArgs e)
60![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
61![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
62![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
63
HttpApplication application = (HttpApplication)sender;
64![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
65
application.Context.Response.Write("application_PreSendRequestContent<br/>");
66![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
67
}
68![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
69
70![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
71
void application_PreSendRequestHeaders(object sender, EventArgs e)
72![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
73![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
74![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
75
HttpApplication application = (HttpApplication)sender;
76![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
77
application.Context.Response.Write("application_PreSendRequestHeaders<br/>");
78![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
79
}
80![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
81
82![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
83
void application_ResolveRequestCache(object sender, EventArgs e)
84![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
85![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
86![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
87
HttpApplication application = (HttpApplication)sender;
88![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
89
application.Context.Response.Write("application_ResolveRequestCache<br/>");
90![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
91
}
92![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
93
94![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
95
void application_AuthorizeRequest(object sender, EventArgs e)
96![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
97![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
98![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
99
HttpApplication application = (HttpApplication)sender;
100![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
101
application.Context.Response.Write("application_AuthorizeRequest<br/>");
102![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
103
}
104![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
105
106![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
107
void application_AuthenticateRequest(object sender, EventArgs e)
108![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
109![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
110![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
111
HttpApplication application = (HttpApplication)sender;
112![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
113
application.Context.Response.Write("application_AuthenticateRequest<br/>");
114![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
115
}
116![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
117
118![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
119
void application_AcquireRequestState(object sender, EventArgs e)
120![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
121![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
122![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
123
HttpApplication application = (HttpApplication)sender;
124![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
125
application.Context.Response.Write("application_AcquireRequestState<br/>");
126![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
127
}
128![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
129
130![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
131
void application_ReleaseRequestState(object sender, EventArgs e)
132![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
133![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
134![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
135
HttpApplication application = (HttpApplication)sender;
136![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
137
application.Context.Response.Write("application_ReleaseRequestState<br/>");
138![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
139
}
140![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
141
142![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
143
void application_PostRequestHandlerExecute(object sender, EventArgs e)
144![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
145![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
146![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
147
HttpApplication application = (HttpApplication)sender;
148![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
149
application.Context.Response.Write("application_PostRequestHandlerExecute<br/>");
150![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
151
}
152![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
153
154![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
155
void application_PreRequestHandlerExecute(object sender, EventArgs e)
156![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
157![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
158![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
159
HttpApplication application = (HttpApplication)sender;
160![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
161
application.Context.Response.Write("application_PreRequestHandlerExecute<br/>");
162![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
163
}
164![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
165
166![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
167
void application_EndRequest(object sender, EventArgs e)
168![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
169![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
170![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
171
HttpApplication application = (HttpApplication)sender;
172![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
173
application.Context.Response.Write("application_EndRequest<br/>");
174![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
175
}
176![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
177
178![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
179
void application_BeginRequest(object sender, EventArgs e)
180![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
181![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
182![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
183
HttpApplication application = (HttpApplication)sender;
184![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
185
application.Context.Response.Write("application_BeginRequest<br/>");
186![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
187
}
188![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
189
190![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
191
192![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
193
194![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
195
#endregion
196![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
197
}
198![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
199
}![](https://images.cnblogs.com/cnblogs_com/stwyhm/HttpModule/HttpModuleSample2.JPG)
多个自定义的Http Module的运作
从运行结果可以看到,在web.config文件中引入自定义HttpModule的顺序就决定了多个自定义HttpModule在处理一个HTTP请求的接管顺序。注:系统默认那几个HttpModule是最先衩ASP.NET Framework所加载上去的。
示例3:(代码类同示例2)
![](https://images.cnblogs.com/cnblogs_com/stwyhm/HttpModule/HttpModuleSample3.JPG)
在HttpModule中终止此次的HTTP请求
可以利用HttpModule通过调用HttpApplication.CompleteRequest()方法实现当满足某一个条件时终止此次的HTTP请求。
需要注意的是,即使调用了HttpApplication.CompleteRequest()方法终止了一个HTTP请求,ASP.NET Framework仍然会触发HttpApplication后面的这3个事件:EndRequest事件、PreSendRequestHeaders事件、PreSendRequestContent事件。
如果存在多个自定义的HttpModule的话,当Module1终止了一个HTTP请求,这个HTTP请求将不会再触发Module2中相应的事件了,但Module2的最后三个事件仍会被触发。
示例4:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
1
using System;
2![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
using System.Collections.Generic;
4![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
using System.Text;
6![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
using System.Web;
8![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
10![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
namespace MyHttpModule
12![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
13![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
14![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
15
public class CompleteRequestHttpModule : IHttpModule
16![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
17![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
18![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
19![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
IHttpModule 成员#region IHttpModule 成员
20![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
21
22![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
23
public void Dispose()
24![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
25![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{}
26![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
27
28![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
29
public void Init(HttpApplication application)
30![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
31![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
32![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
33
application.BeginRequest += new EventHandler(Application_BeginRequest);
34![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
35
}
36![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
37
38![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
39
void Application_BeginRequest(object sender, EventArgs e)
40![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
41![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
42![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
43
HttpApplication application = (HttpApplication)sender;
44![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
45
application.CompleteRequest();
46![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
47
application.Context.Response.Write("请求被终止。");
48![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
49
}
50![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
51
52![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
53
#endregion
54![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
55
}
56![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
57
}![](https://images.cnblogs.com/cnblogs_com/stwyhm/HttpModule/HttpModuleSample4.JPG)
参考资料
《ASP.NET深入解析》
《ASP.NET实用全书》
本文源码:
下载