ASP.NET自定义模块

来源:互联网 发布:怎样加入网络直销 编辑:程序博客网 时间:2024/06/04 18:31

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