• ASP.NET IHttpModule


    IHttpModule接口的定义:向实现类提供模块初始化和处置事件。它包含2个方法:Dispose()和Init();

    自定义IHttpModule接口
    实现一个自定义的IHttpModule接口需要2个步骤:

    1)实现一个继承了IHttpModule接口的类

    2)在Web.config文件中注册这个自定义HttpModule

    view source

    print?01 public class CustomerModule:IHttpModule

    02    {

    03        #region IHttpModule 成员

    04        public void Dispose()

    05        {

    06              

    07        }

    08        public void Init(HttpApplication context)

    09        {

    10            context.BeginRequest += new EventHandler(context_BeginRequest);

    11            context.EndRequest += new EventHandler(context_EndRequest);

    12        }

    13        void context_BeginRequest(object sender, EventArgs e)

    14        {

    15            HttpApplication application = (HttpApplication)sender;

    16            application.Context.Response.Write("自定义ModuleRequest开始");

    17        }

    18        void context_EndRequest(object sender, EventArgs e)

    19        {

    20            HttpApplication application = (HttpApplication)sender;

    21            application.Context.Response.Write("自定义ModuleRequest结束");

    22        }

    23        #endregion

    24    }

    web.config

    view source

    print?1 <httpModules>

    2   <add name="customerModule" type="WebApplication3.CustomerModule, WebApplication3"/>

    3 </httpModules>

    ASP.NET 内置的HttpModule
    view source

    print?1 <FONT color=#7b7d62>在C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.config下有很多ASP.NET内置的HttpMoudle默认是加载的如果你不想加载其中的一些可以Remove掉这样可以提高一些性能如:</FONT>

    view source

    print?1 <remove name="WindowsAuthentication"/>

    view source

    print?1 内置的如下:

    view source

    print?01 <httpModules>

    02     <add name="OutputCache" type="System.Web.Caching.OutputCacheModule"/>

    03     <add name="Session" type="System.Web.SessionState.SessionStateModule"/>

    04     <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule"/>

    05     <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule"/>

    06     <add name="PassportAuthentication" type="System.Web.Security.PassportAuthenticationModule"/>

    07     <add name="RoleManager" type="System.Web.Security.RoleManagerModule"/>

    08     <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule"/>

    09     <add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule"/>

    10     <add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule"/>

    11     <add name="Profile" type="System.Web.Profile.ProfileModule"/>

    12     <add name="ErrorHandlerModule" type="System.Web.Mobile.ErrorHandlerModule, System.Web.Mobile, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>

    13     <add name="ServiceModel" type="System.ServiceModel.Activation.HttpModule, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>

    14 </httpModules>

    Global.asax与HttpModule
    view source

    print?1 <FONT color=#7b7d62>在ASP.NET中Global.asax是一个全局文件,他可以注册应用程序和Session事件,还可以注册HttpModule中暴露的事件(包括内置的HttpModule和自定义的HttpModule),有2点注意事项:</FONT>

    view source

    print?1 <FONT color=#7b7d62>1)每当一个Http Request到达时,应用程序事件都要出发遍,但是Application_Start和Application_End仅在第一个资源文件被访问时触发。</FONT>

    view source

    print?1 <FONT color=#7b7d62>2)HttpModule无法注册和响应Session 事件,Session事件只能在Global.asax中注册</FONT>

    view source

    print?01 public class CustomerModule:IHttpModule

    02 {

    03     //自定义暴露的事件

    04     public event EventHandler ExposedEvent;

    05     

    06     #region IHttpModule 成员

    07     public void Dispose()

    08     {

    09           

    10     }

    11     public void Init(HttpApplication context)

    12     {

    13         context.BeginRequest += new EventHandler(context_BeginRequest);

    14         context.EndRequest += new EventHandler(context_EndRequest);

    15     }

    16     void context_BeginRequest(object sender, EventArgs e)

    17     {

    18         HttpApplication application = (HttpApplication)sender;

    19         application.Context.Response.Write("自定义ModuleRequest开始");

    20     }

    21     void context_EndRequest(object sender, EventArgs e)

    22     {

    23         HttpApplication application = (HttpApplication)sender;

    24         application.Context.Response.Write("自定义ModuleRequest结束");

    25         //触发事件

    26         OnExposedEvent(new EventArgs());

    27     }

    28     #endregion

    29       

    30     protected void OnExposedEvent( EventArgs e)

    31     {

    32         if (ExposedEvent!=null)

    33         {

    34             ExposedEvent(this, e);

    35         }

    36     }

    37 }

    在Global.asax中添加这样的代码

    view source

    print?1 protected void customerModule_ExposedEvent(object sender, EventArgs e)

    2 {

    3     Response.Write("来自Global.asax");

    4 }

    其中Global.asax中事件名的定义是:模块名_事件名。其中模块名是你在Web.config中注册的模块名称

  • 相关阅读:
    ES的基本操作
    Tomcat常规配置
    20220606 JDK 915 新版本特性
    style="wordbreak: breakall;" 用于 对应 td 文本内容过长自适应换行适用
    Springboot项目远程dubug调试
    矩阵可逆的充要条件
    机器学习基础知识
    Linux第一章
    QT linux QT更改默认构建目录debug与release生成的目录放在项目的文件夹内部
    通讯方式通信协议通讯通信区别by txwtech
  • 原文地址:https://www.cnblogs.com/puzi0315/p/2625977.html
Copyright © 2020-2023  润新知