这篇讲的比较清楚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

认识HttpModule相关推荐

  1. asp.net httpmodule 访问页面控件 备忘

    用到的时候发现还得找代码,存一个例子方便自己和他人修改: using System; using System.Data; using System.Configuration; using Syst ...

  2. ASP.NET的(HttpModule,HttpHandler)

    在以前的ASP时候,当请求一个*.asp页面文件的时候,这个HTTP请求首先会被一个名为inetinfo.exe进程所截获,这个进程实际上就是www服务.截获之后它会将这个请求转交给asp.dll进程 ...

  3. HttpHand和HttpModule的详细解释,包括Asp.Net对Http请求的处理流程。

    了解当用户对一个.aspx页面提出请求时,后台的Web服务器的动作流程.当对这个流程了解后,我们就会明白HttpHandler和HttpModule的作用了. 首先,来了解一下IIS系统.它是一个程序 ...

  4. ASP.Net中自定义Http处理及应用之HttpModule篇

    HttpHandler实现了类似于ISAPI Extention的功能,他处理请求(Request)的信息和发送响应(Response).HttpHandler功能的实现通过实现IHttpHandle ...

  5. Asp.Net 构架(HttpModule 介绍)

    Http 请求处理流程 和 Http Handler 介绍 这两篇文章里,我们首先了解了Http请求在服务器端的处理流程,随后我们知道Http请求最终会由实现了IHttpHandler接口的类进行处理 ...

  6. HttpModule与HttpHandler详解

    ASP.NET对请求处理的过程: 当请求一个*.aspx文件的时候,这个请求会被inetinfo.exe进程截获,它判断文件的后缀(aspx)之后,将这个请求转交给 ASPNET_ISAPI.dll, ...

  7. HttpHandler与HttpModule区别

    ASP.Net处理Http Request时,使用Pipeline(管道)方式,由各个HttpModule对请求进行处理,然后到达 HttpHandler,HttpHandler处理完之后,仍经过Pi ...

  8. 从请求管道深入剖析HttpModule的实现机制,有图有真相

    想要了解底层的原理必须对请求处理过程和页面的生命周期有点了解才方便您入门学习一下内容: 关于请求处理过程和页面的生命周期将会在接下来的日子为大家做一个深入的讲解. HttpModule的实现机制如下: ...

  9. Asp.net基础概念之 HttpModule

    HttpModule是如何工作的 当一个HTTP请求到达HttpModule时,整个ASP.NET Framework系统还并没有对这个HTTP请求做任何处理,也就是说此时对于HTTP请求来讲,Htt ...

  10. DotNetNuke与MemberShip的结合(五年版)第三步修改HttpModule.DNNMembership

    DotNetNuke与MemberShip的结合(五年版) 第一步:实装基于现有membership的DNN http://www.cnblogs.com/shiningrise/archive/20 ...

最新文章

  1. 学密码学一定得学程序 KMP
  2. java 硬件交互_Java关键字之native
  3. 导出数据在SQL Server中作为INSERT INTO
  4. VGA、DVI、HDMI、DP、Type-C不同视频接口有啥区别?
  5. 基于SignalR实现B/S系统对windows服务运行状态的监测
  6. 每天一道LeetCode-----括号匹配
  7. 美国大学计算机专业排名2014,2014年美国大学本科计算机专业排名
  8. uni-app中view组件的基本使用
  9. 转:Web页面通过URL地址传递参数常见问题及检测方法
  10. redis持久化方法
  11. python人工智能教程百度云_【python实战教程百度网盘】求最新python人工智能视频教程网盘链接...
  12. python风格迁移_Python简单实现图像风格迁移
  13. matlab插值拟合案例,matlab插值与拟合
  14. app消息推送的详细实现教程
  15. Unity3D发布错误:could not allocate memery:system out of memery!
  16. 北京冬奥会 向世界展示了什么
  17. 图论科学家教你如何安排婚礼座次
  18. 使用HTML5 SVG绘制的多层饼形图(纯javascript)
  19. 幕课在线办公项目笔记——day2
  20. 音量控制程序制作手记 (及全部源码)

热门文章

  1. 卡方检验chi-square test
  2. stft isar成像 matlab,基于STFT和FRFT的运动目标雷达三维成像方法与流程
  3. java 程序打包成jar_Java程序打包成jar包
  4. laravel 先排序后分组怎么写_希尔排序算法拆解解析
  5. HTML基础知识(w3school)
  6. python之attrgetter函数对对象排序
  7. 《转》 在C++中使用TinyXML2解析xml
  8. 压力测试之apache benchmark
  9. 数据库添加一个列的唯一约束
  10. 分享几个益智题......看你能做对吗?