ASP.NET自定义模块

要创建自定义模块,类需要实现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>

  程序执行图:

运行时

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值