要创建自定义模块,类需要实现IHttpModule接口。这个接口定义了Init和Dispose方法。
Init方法在启动Web应用程序时调用,其参数的类型是HttpContext,可以添加应用程序处理事件。
新建类库ModuleSample,新建类SampleModule添加如下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web; namespace ModuleSample { public class SampleModule : IHttpModule { private const string allowAddressesFile = "AllowedAddresses.txt" ; private List< string > allowAddressesList; public void Dispose() { throw new NotImplementedException(); } public void Init(HttpApplication context) { context.LogRequest += new EventHandler(OnLogRequest); context.BeginRequest += BeginRequest; context.PreRequestHandlerExecute += PreRequestHandlerExecute; } private void BeginRequest( object sender, EventArgs e) { LoadAddresses((sender as HttpApplication).Context); } private void LoadAddresses(HttpContext context) { if (allowAddressesList == null ) { string path = context.Server.MapPath(allowAddressesFile); allowAddressesList = File.ReadAllLines(path).ToList(); } } private void PreRequestHandlerExecute( object sender, EventArgs e) { HttpApplication app = sender as HttpApplication; HttpRequest request = app.Context.Request; if (!allowAddressesList.Contains(request.UserHostAddress)) { throw new HttpException(403, "IP address denied" ); } } public void OnLogRequest(Object source, EventArgs e) { //custom logging logic can go here } } } |
在WebConfig中配置:
1
2
3
4
5
6
7
8
9
|
<system.webServer> <handlers> <add name= "CustomHandler" verb= "*" path= "CallCustomHandler" type= "SampleHandler.CustomHandler,SampleHandler" /> <add name= "InfoHandler" verb= "GET" path= "CallInfoHandler.axd" type= "SampleHandler.InfoHandler,SampleHandler" /> </handlers> <modules> <add name= "SampleModule" type= "ModuleSample.SampleModule,ModuleSample" /> </modules> </system.webServer> |
程序执行图:
运行时
原文:http://www.cnblogs.com/chenshizhutou/p/6715355.html