HttpHandler和HttpModule
ASP.NET的HTTP请求处理方法
当客户端向web服务器请求一个*.aspx的页面文件时,这个http请求也会被inetinfo.exe进程截获(www服务),它判断文件后缀之后,把这个请求转交给ASPNET_ISAPI.DLL而ASPNET_ISAPI.DLL则会通过一个Http PipeLine的管道,将这个http请求发送给ASPNET_WP.EXE进程,当这个HTTP请求进入ASPNET_WP.EXE进程之后,asp.net framework就会通过HttpRuntime来处理这个Http请求,处理完毕后将结果返回给客户端。
------------------------------------
当一个http请求被送入到HttpRuntime之后,这个Http请求会继续被送入到一个被称之为HttpApplication Factory的一个容器当中,而这个容器会给出一个HttpApplication实例来处理传递进来的http请求,而后这个Http请求会依次进入到如下几个容器中:
HttpModule --> HttpHandler Factory --> HttpHandler
当系统内部的HttpHandler的ProcessRequest方法处理完毕之后,整个Http Request就被处理完成了,客户端也就得到相应的东东了。
完整的http请求在asp.net framework中的处理流程:
HttpRequest-->inetinfo.exe->ASPNET_ISAPI.DLL-->Http Pipeline-->ASPNET_WP.EXE-->HttpRuntime-->HttpApplication Factory-->HttpApplication-->HttpModule-->HttpHandler Factory-->HttpHandler-->HttpHandler.ProcessRequest()
如果想在中途截获一个httpRequest并做些自己的处理,就应该在HttpRuntime运行时内部来做到这一点,确切的说时在HttpModule这个容器中做到这个的。
IHttpModule与IHttpHandler的区别主要有两点(实际上大家看MSDN时应该也注意到了):
1.先后次序.先IHttpModule,后IHttpHandler.
2.对请求的处理上:
IHttpModule是属于大小通吃类型,无论客户端请求的是什么文件,都会调用到它;例如aspx,rar,html的请求.
IHttpHandler则属于挑食类型,只有ASP.net注册过的文件类型(例如aspx,asmx等等)才会轮到调用它.
如果我们自定义了一个针对"*.aspx"的HttpHandler类的话,那么系统会将对此http请求的处理权完全交给我们自己定义的这个HttpHandler类来处理,而我们自己的HttpHandler类则需要自己完全解析这个Http请求,并作出处理。
IHttpHandler接口中最重要的方法ProcessRequest,这个方法就是HttpHandler用来处理一个Http请求,当一个Http请求经过由HttpModule容器传递到HttpHandler容器中的时候,framework会调用HttpHandler的ProcessRequest方法来做对这个Http请求做真正的处理。
framework实际上并不是直接把相关页面的HTTP请求定位到一个内部默认的IHttpHandler容器之上的,而是定位到了其 内部默认的IHttpHandler Factory上了。IHttpHandler Factory的作用就是对很多系统已经实现了的IHttpHandler容器进行调度和管理的,这样做的优点是大大增强了系统的负荷性,提升了效率。
生命周期中涉及到几个非常重要的对象:
HttpHandler,HttpModule,IHttpHandlerFactory,
他们的执行(顺序)大致的执行过程是这样的:client端发送页面请求,
被IIS的某个进程截获,它根据申请的页 面后缀(.aspx)不同,
调用不同的页面处理程序(.asp->asp.dll; .aspx->ISAPI.dll).而页面处理程序在处理过程中,
则要经历HttpModule,HttpHandler的处理:前者HttpModule用于页面处理前和处理后的一些事件的处理,
后者HttpHandler进行真正的页面的处理。
<httpModules>
<add name="test" type="MyHttpModuleTest.MyHttpModule,MyHttpModule"/>
</httpModules>
注意要区分大小写,因为web.config作为一个XML文件是大小写敏感的。
“type=MyHttpModuleTest.MyHttpModule,MyHttpModule”
告诉我们系统将会将http request请求交给位于MyHttpModule.dll文件中的MyHttpModuleTest.MyHttpModule类去处理。
HttpHandler是完全的对Http Request的截取。
<httpModules>
<add name="test" type="MyHttpModuleTest.MyHttpModule,MyHttpModule"/>
</httpModules>
注意要区分大小写,因为web.config作为一个XML文件是大小写敏感的。
“type=MyHttpModuleTest.MyHttpModule,MyHttpModule”
告诉我们系统将会将http request请求交给位于
MyHttpModule.dll文件中的MyHttpModuleTest.MyHttpModule类去处理。
HttpHandler是完全的对Http Request的截取。
分享到:
相关推荐
在这个主题中,我们将深入探讨ASP.NET架构中的两个关键组件:HttpHandler和HttpModule。 **HttpHandler**是ASP.NET处理HTTP请求的核心组件。每个HTTP请求都会被路由到一个特定的HttpHandler,它负责处理特定类型的...
管线包含了多个事件,每个事件在处理请求的过程中依次触发,而HttpModule和HttpHandler就是在这些事件中被用来处理请求的组件。 2. HttpModule: HttpModule是实现自接口System.Web.IHttpModule的类,并且在请求管线...
HttpHandler 和 HttpModule 在 ASP.Net 应用的自定义 Http 处理和应用中扮演着关键角色。 概述:HttpHandler 和 HttpModule 是 ASP.Net 应用程序中两个重要的组件,它们提供了自定义 Http 处理和应用的能力。...
在ASP.NET框架中,HttpModule和HttpHandler是两个至关重要的组件,它们构成了应用程序处理HTTP请求的核心机制。了解这两个概念对于深入理解ASP.NET的工作原理至关重要。 首先,我们来谈谈HttpModule。HttpModule是...
通过深入理解HttpModule和HttpHandler的工作原理,我们可以更好地优化应用程序性能,实现复杂的业务需求。博客上的学习资料会进一步详细解释这些概念,并提供实践示例,帮助你轻松掌握这两个核心组件。
而页面处理程序在处理过程中,则要经历HttpModule,HttpHandler的处理:前者HttpModule用于页面处理前和处理后的一些事件的处理,后者HttpHandler进行真正的页面的处理。如前所说,HttpModule会在页面处理前和后对页
Manage Media To Upload v1.0源码 图片文件上传管理程序,实例程序使用MVC3.0编写。 项目描述 上传任何大小的文件在.NET。...web.config管理HttpHandler 和 HttpModule 成功测试在IIS6, IIS7, IIS7.5,开发者工具
1. HttpHandler和HttpModule:通过自定义HttpHandler和HttpModule,可以在HTTP请求生命周期的不同阶段捕获请求,动态生成HTML并保存为静态文件。 2. Page Output Caching:ASP.NET内置的页面输出缓存可以自动将已...
2. **HttpHandler和HttpModule**:通过自定义HttpHandler或HttpModule,可以在HTTP请求生命周期中的某个阶段捕获请求并生成静态页面。HttpHandler负责处理特定类型的HTTP请求,而HttpModule则可以拦截所有请求,提供...
### httpmodule和httphandler详解 #### 一、概述 在ASP.NET开发中,`HttpModule`和`HttpHandler`是两个重要的概念,它们都属于HTTP运行时的一部分,用于处理HTTP请求的不同方面。掌握这两者之间的区别以及如何使用...
6. HttpHandler 和 HttpModule:HttpModule可以过滤HTTP请求,但每个请求可能会被多个HttpModule处理;HttpHandler是处理特定HTTP请求的终结点,它的程序后缀名通常是.ashx。 7. ASP.NET 程序生成的文件:当创建ASP...
课程还涵盖了HttpHandler和HttpModule的概念,它们是ASP.NET请求处理的重要组件。HttpHandler是处理特定HTTP请求的终结点,而HttpModule则可以作为HTTP请求生命周期中的过滤器。此外,课程还讨论了Session状态管理,...
3. 使用HttpHandler和HttpModule:自定义HTTP处理器(HttpHandler)或模块(HttpModule)来处理特定的URL请求,实现URL的动态到静态转换。 在实际应用中,静态化和伪静态化的选择往往取决于项目需求。对于内容频繁...
HttpModule,HttpHandler详细解释
2. **自定义HttpHandler和HttpModule**:HTTP处理器(HttpHandler)和HTTP模块(HttpModule)是ASP.NET处理请求的关键组件。开发者可以通过编写自定义的HttpHandler来处理特定类型的HTTP请求,比如处理静态文件、流...
ASP.NET提供了多种方法处理请求,如Page类、HttpHandler和HttpModule。这些组件可以拦截、修改和处理请求,实现动态内容生成和中间件功能。 文件上传和下载是Web应用的常见需求。ASP.NET 3.5提供FileUpload控件用于...
在ASP.NET中,HttpModule和HttpHandler的配置通常在Web.config文件中完成。以下是如何配置HttpModule和HttpHandler的示例: ```xml , MyAssembly"/> *" path="*.myext" type="MyNamespace.MyHandler, ...
在图片管理方面,系统可能利用了ASP.NET内置的HttpHandler和HttpModule来处理图片请求,实现图片的上传、缩放、裁剪等功能。此外,考虑到动画效果,系统可能使用了GIF或者HTML5的Canvas元素来创建动态图片展示,为...
3. **路由和HTTP处理**:C#中的HttpHandler和HttpModule接口用于处理HTTP请求。源码可能包含这些接口的实现,用于自定义Web应用的行为。 4. **数据库交互**:使用ADO.NET或者Entity Framework进行数据库操作,源码...