认识HttpModule

这篇讲的比较清楚http://www.cnblogs.com/wxh19860528/archive/2012/07/09/2582825.html

下面是自己的整理

管道的处理顺序如下
            BeginRequest //在 ASP.NET 响应请求时作为 HTTP 执行管线链中的第一个事件发生
            AuthenticateRequest//当安全模块已建立用户标识时发生
            AuthorizeRequest//当安全模块已验证用户授权时发生
            ResolveRequestCache//在 ASP.NET 完成授权事件以使缓存模块从缓存中为请求提供服务后发生,从而绕过事件处理程序(例如某个页或 XML Web services)的执行
            AcquireRequestState//当 ASP.NET 获取与当前请求关联的当前状态(如会话状态)时发生。
            PreRequestHandlerExecute//恰好在 ASP.NET 开始执行事件处理程序(例如,某页或某个 XML Web services)前发生。
            PostRequestHandlerExecute//在 ASP.NET 事件处理程序(例如,某页或某个 XML Web service)执行完毕时发生。
            ReleaseRequestState//在 ASP.NET 执行完所有请求事件处理程序后发生。该事件将使状态模块保存当前状态数据。
            UpdateRequestCache//当 ASP.NET 执行完事件处理程序以使缓存模块存储将用于从缓存为后续请求提供服务的响应时发生。
            EndRequest//在 ASP.NET 响应请求时作为 HTTP 执行管线链中的最后一个事件发

实现管道拦截需要继承IHttpModule接口,该接口在System.Web里

需要实现接口的两个方法

 

// 摘要:
        //     处置由实现 System.Web.IHttpModule 的模块使用的资源(内存除外)。
        void Dispose();
        //
        // 摘要:
        //     初始化模块,并使其为处理请求做好准备。
        //
        // 参数:
        //   context:
        //     一个 System.Web.HttpApplication,它提供对 ASP.NET 应用程序内所有应用程序对象的公用的方法、属性和事件的访问
        void Init(HttpApplication context);


 

 

目前我所了解的运用就2个,分别是BeginRequest,EndRequest

先说EndRequest,进入每个页面有什么弹窗广告呀,页面的脚注啊,如果每个页面都写一遍,那么管理起来非常麻烦

再注册EndRequest

public void Init(HttpApplication context)
        {
            context.BeginRequest+=new EventHandler(context_BeginRequest);
            context.EndRequest+=new EventHandler(context_EndRequest);
        }

 

private void context_EndRequest(object sender, EventArgs e)
        {
            HttpApplication application = (HttpApplication)sender;
            //application.Response.Write("<----------我是每个页面都要生成的文字----------->");
            application.Response.Write("<script>alert('haha')</script>");
        }

最关键的是需要在web.config里加入这个模块

<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
    <httpModules>
      <add name="HttpModule" type="HttpModule.mytest"/>
    </httpModules>
  </system.web>
</configuration>

这里需要注意name和type的值,name的值填程序集名称,type填命名空间+类名,然后运行,就会发现每个页面都会弹窗...当然可以限制httpmodule拦截哪些页面,如下

<appSettings>
    <add key="mytest" value="test1.aspx"/>
    <add key="mytest2" value="test2.aspx"/>
  </appSettings>

在Init初始化时,得到web.config里需要拦截的页面

context.EndRequest+=new EventHandler(context_EndRequest);
stophtml=ConfigurationManager.AppSettings["mytest"].ToLower();

然后再BeginRequest中对比当前请求的页面和需要拦截的页面是否一致

private void context_BeginRequest(object sender, EventArgs e)
        {
            HttpApplication application = (HttpApplication)sender;
            var rawUrl = application.Request.RawUrl.ToLower();
            if (rawUrl.Contains(stophtml))
            {
                application.Response.Write("<------------这是我拦截的页面------------>");
            }

        }

运行,看,需要拦截的页面才会出现那段话

今天就整理到这儿

转载于:https://www.cnblogs.com/HelloMyWorld/archive/2013/01/20/2868978.html

springboot003基于Springboot+Vue的图书个性化推荐系统的设计与实现毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值