ASP.NET自定义模块

要创建自定义模块,类需要实现IHttpModule接口。这个接口定义了Init和Dispose方法。

Init方法在启动Web应用程序时调用,其参数的类型是HttpContext,可以添加应用程序处理事件。

新建类库ModuleSample,新建类SampleModule添加如下代码:

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中配置:

 <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>

  程序执行图:

运行时

原文地址:https://www.cnblogs.com/simen-tan/p/5427562.html