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

      程序执行图:

    运行时

  • 相关阅读:
    微信JS SDK Demo
    微信jssdk常见错误及解决方法
    多机定时任务处理
    python zip压缩文件 并移动到指定目录
    Nginx + Uswgi + Django的部署
    pycharm 安装第三方库报错:AttributeError: 'module' object has no attribute 'main'
    zabbix监控
    转:老张喝茶 教你同步异步 阻塞与非阻塞
    odoo开发笔记 -- 多对多字段追加数据
    xml文件对比工具推荐:Altova XMLSpy 2013
  • 原文地址:https://www.cnblogs.com/simen-tan/p/5427562.html
Copyright © 2020-2023  润新知