asp.net HttpModule与HttpHandler区别

一,什么是HttpHandler

在asp.net的网站中,在一个普通的请求地址“http://localhost:56093/Default.aspx”中“Default.aspx”就是handler。

也就是说在asp.net中page就是handler,在asp.net MVC中Controller就是handler,handler就是最终处理请求的那个类。

假如http://localhost:56093/Default.aspx这个页面输出的是"Helloworld"几个字。现在http://localhost:56093/这个站点下有100个页面,我想要这个站点的请求都输出

Helloworld字眼怎么办,并且我要所有的请求都必须验证登录了。那是不是需要在100个页面上都写代码呢。微软这么厉害肯定给出了简单的解决方案。就是“HttpModule”.

二,简单的请求流程

相信各位看了不少asp.net请求处理流程的文档。这里推荐园子里Edison Chou的ASP.Net请求处理机制初步探索之旅。

在请求进入到ASP.NET管道后,有三个重要的类,“ISAPIRuntme”,“HttpRuntime”,"HttpApplication".

1,ISAPIRuntme中根据报文创建了“HttpWorkerRequest”类。

2,接着HttpRuntime开始干活,而且大部分的活都是HttpRuntime在干。HttpRuntime初始化了HttpWorkerRequest创建了HttpContent,创建了HttpRequest和HttpResponse,3,创建了HttpApplication(web应用程序实例)。最后调用handler处理请求的也是HttpRuntime中完成的。

3,HttpApplication中初始化各个HttpModule并且注册HttpApplication的19个事件(并且所有的HttpModule都注册了19事件,只是HttpApplication有19事件可以去让HttpModule注册,注册了就会被执行)。

然后HttpRuntime会依次去执行各个HttpModule的相应的事件。接着去调用匹配的handler,然后以回到HttpModule相应的事件,然后一层层返回,直到IIS把内容返回给浏览器。

三,什么HttpModule

IHttpModule就是一个接口,有个重要的方法“void Init(HttpApplication context)”,在这个方法里可以给context(HttpApplication )注册事件。

任何类继承了IHttpModule并且在config中配置了,那么在HttpApplication 的管道中,它的事件就会被执行(如果注册了的话)。

asp.net默认的HttpModule有:

asp.net中有身份验证功能,如果表单验证,如果没登录就会在处理请求之前跳转到登录页面。就是在“FormsAuthentication”中完成的。

这些HttpModule,在HttpApplication中全部会加载进来,在HttpRuntime中会依次去执行它的19个事件(全部19个事件全部注册了的话)

1,那什么时候去执行handler呢

在第11个事件“PreRequestHandlerExecute”和第12个事件“PostRequestHandlerExecute“之间去调用handler,调用完后继续执行httpmodule剩下的事件。

2,这么多HttpModule,HttpRuntime是怎么去执行的呢?

按HttpModule的顺序依次执行,假如有两个HttpModule:Module1和Module2,那么第一个事件”BeginRequest“的执行顺序是:Module1的BeginRequest,Module2的BeginRequest。

3,是不是每个HttpModule里都会执行一次Handler呢?

不是,handler只执行一次。在所有HttpModule的前面11个事件依次执行完后去调用handler,调用完后再依次执行HttpModule剩下的事件。

例子如下:

第一个HttpModule:

第二个HttpModule:

handler处理:

配置HttpModule,让HttpAplication加载:

请求这个Default页面显示的效果为:

四,为什么要有HttpModule

有许多功能是需要我们在handler之前就要去做的,而且也不可能去每一个handler去做,比如身份验证。

在实际业务场景中我们也有可能需要在handler之前做大量的工作。所以微软就公开了这个接口,可以让我们更灵活的应用在我们的业务场景中。

五,ASP.NET MVC的区别

asp.net mvc与asp.net的请求管道模型是一样的。mvc最重要的是它的路由功能,而且它的本质上就是一个HttpModule,

在asp.net全局配置文件中配置了这个Module,UrlRoutingModule源码

在该Module中注册了”PostResolveRequestCache“事件,对请求进行拦截。根据mvc的路由规则找到对应的controller(handler),然后调用匹配的action.

时间: 2024-10-14 19:45:38

asp.net HttpModule与HttpHandler区别的相关文章

asp.net HttpModule和HttpHandler

ASP.Net处理Http Request时,使用Pipeline(管道)方式,由各个HttpModule对请求进行处理,然后到达 HttpHandler,HttpHandler处理完之后,仍经过Pipeline中各个HttpModule的处理,最后将HTML发送到客户端浏览 器中.HttpModule会在页面处理前和后对页面进行处理,所以它不会影响真正的页面请求.通常用在给每个页面的头部或者尾部添加一些信息(如版 权声明)等.IHttpModule与IHttpHandler的区别整理1.先后次

ASP.NET-自定义HttpModule与HttpHandler

在之前的ASP.NET是如何在IIS下工作的这篇文章中介绍了ASP.NET与IIS配合工作的机制,在http请求经过一系列处理后,最后到达ASP.NET管道中,这时,就是Http Modules和HttpHandler出场的时候了. 再来摆出管道工作时序图来一看: HttpModule HttpModule是类似于过滤器的作用,可以没有,也可以有任意个,每一个都可以订阅管道事件中的任意个事件,在每个订阅的事件中可自定义功能实现. HttpModule是实现IHttpModule接口的类.接口如下

ASP.NET-自定义HttpModule与HttpHandler介绍

在之前的ASP.NET是如何在IIS下工作的这篇文章中介绍了ASP.NET与IIS配合工作的机制,在http请求经过一系列处理后,最后到达ASP.NET管道中,这时,就是Http Modules和HttpHandler出场的时候了.一看: HttpModule HttpModule是类似于过滤器的作用,可以没有,也可以有任意个,每一个都可以订阅管道事件中的任意个事件,在每个订阅的事件中可自定义功能实现. HttpModule是实现IHttpModule接口的类.接口如下: public inte

Asp.net中的HttpModule和HttpHandler的简单用法

在Asp.net中,HttpModule和HttpHandler均可以截取IIS消息进行处理,这使得我们制作人员能够非常方便的进行诸如图片水印添加,图片盗链检查等功能. 下面先就HttpModule的使用方法进行简单说明: using System;using System.Web; namespace MyWebApp{ public class MyHttpModule:IHttpModule { public void Init(HttpApplication application) {

ASP.NET (HttpModule,HttpHandler)

asp.net 事件模型机制 ----------------------- 一 客户的请求页面由aspnet_isapi.dll这个动态连接库来处理,把请求的aspx文件发送给CLR进行编译执行,然后把Html流返回给浏览器 -----------------asp.net 事件模型机制 ----------------------- 一 客户的请求页面由aspnet_isapi.dll这个动态连接库来处理,把请求的aspx文件发送给CLR进行编译执行,然后把Html流返回给浏览器 -----

HttpModule和HttpHandler -- 系列文章

ASP.NET 生命周期 在ASP.Net2.0中使用UrlRewritingNet实现链接重写 IHttpModule实现URL重写 使用IHttpHandler防盗链 HttpModule,HttpHandler,HttpHandlerFactory简单使用 HttpModule的认识 了解 IHttpHandler 出处:http://www.cnblogs.com/luckdv/tag/IHttpHandler/

HttpModule、HttpHandler和Page的生命周期

1.引言 2.两个处理步骤 2.1.创建ASP.NET环境 2.2.用触发的MHPM事件处理请求 3.什么事件中应该做什么 4.示例代码 5.深入ASP.NET页面事件 1.引言 这篇文章我们将试图理解,从用户发送一个请求直到请求呈现到浏览器发生的事件的差异.因此,我们首先将介绍解ASP.NET请求的两个概括的步骤,接下来我们将介绍'HttpHandler','HttpModule'和ASP.NET页面对象发出的事件的差异.随着我们的事件旅程,我们将理解这些事件的逻辑. 2.两个处理步骤 ASP

HttpModule与HttpHandler详解

ASP.NET对请求处理的过程:当请求一个*.aspx文件的时候,这个请求会被inetinfo.exe进程截获,它判断文件的后缀(aspx)之后,将这个请求转交给 ASPNET_ISAPI.dll,ASPNET_ISAPI.dll会通过http管道(Http PipeLine)将请求发送给ASPNET_WP.exe进程,在ASPNET_WP.exe进程中通过HttpRuntime来处理这个请求,处理完毕将结果返回客户端.    inetinfo.exe进程:是www服务的进程,IIS服务和ASP

HttpApplication、HttpContext、HttpModule、HttpHandler

http://www.cnblogs.com/ljzforever/archive/2010/03/07/1680311.html http://runboliu.blog.163.com/blog/static/13459317201101352357218/ HttpApplication.HttpContext.HttpModule.HttpHandler,布布扣,bubuko.com