`
冷寒冰
  • 浏览: 251653 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HttpHandler和HttpModule

 
阅读更多
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高清PDF文字版

    在这个主题中,我们将深入探讨ASP.NET架构中的两个关键组件:HttpHandler和HttpModule。 **HttpHandler**是ASP.NET处理HTTP请求的核心组件。每个HTTP请求都会被路由到一个特定的HttpHandler,它负责处理特定类型的...

    关于HttpHandler与HttpModule的理解和应用方法

    管线包含了多个事件,每个事件在处理请求的过程中依次触发,而HttpModule和HttpHandler就是在这些事件中被用来处理请求的组件。 2. HttpModule: HttpModule是实现自接口System.Web.IHttpModule的类,并且在请求管线...

    自定义Http处理及应用之HttpHandler篇

    HttpHandler 和 HttpModule 在 ASP.Net 应用的自定义 Http 处理和应用中扮演着关键角色。 概述:HttpHandler 和 HttpModule 是 ASP.Net 应用程序中两个重要的组件,它们提供了自定义 Http 处理和应用的能力。...

    HttpModule与HttpHandler

    在ASP.NET框架中,HttpModule和HttpHandler是两个至关重要的组件,它们构成了应用程序处理HTTP请求的核心机制。了解这两个概念对于深入理解ASP.NET的工作原理至关重要。 首先,我们来谈谈HttpModule。HttpModule是...

    HttpModule和httpHandler学习例子

    通过深入理解HttpModule和HttpHandler的工作原理,我们可以更好地优化应用程序性能,实现复杂的业务需求。博客上的学习资料会进一步详细解释这些概念,并提供实践示例,帮助你轻松掌握这两个核心组件。

    HttpHandler HttpModule入门篇

    而页面处理程序在处理过程中,则要经历HttpModule,HttpHandler的处理:前者HttpModule用于页面处理前和处理后的一些事件的处理,后者HttpHandler进行真正的页面的处理。如前所说,HttpModule会在页面处理前和后对页

    Manage Media To Upload v1.0源码

    Manage Media To Upload v1.0源码 图片文件上传管理程序,实例程序使用MVC3.0编写。 项目描述 上传任何大小的文件在.NET。...web.config管理HttpHandler 和 HttpModule 成功测试在IIS6, IIS7, IIS7.5,开发者工具

    ASP.NET生成静态页技术

    1. HttpHandler和HttpModule:通过自定义HttpHandler和HttpModule,可以在HTTP请求生命周期的不同阶段捕获请求,动态生成HTML并保存为静态文件。 2. Page Output Caching:ASP.NET内置的页面输出缓存可以自动将已...

    asp.net生成静态页面

    2. **HttpHandler和HttpModule**:通过自定义HttpHandler或HttpModule,可以在HTTP请求生命周期中的某个阶段捕获请求并生成静态页面。HttpHandler负责处理特定类型的HTTP请求,而HttpModule则可以拦截所有请求,提供...

    httpmodule和httphandler

    ### httpmodule和httphandler详解 #### 一、概述 在ASP.NET开发中,`HttpModule`和`HttpHandler`是两个重要的概念,它们都属于HTTP运行时的一部分,用于处理HTTP请求的不同方面。掌握这两者之间的区别以及如何使用...

    北大青鸟 ACCP 5.0 Y2 笔试题2008-12-21

    6. HttpHandler 和 HttpModule:HttpModule可以过滤HTTP请求,但每个请求可能会被多个HttpModule处理;HttpHandler是处理特定HTTP请求的终结点,它的程序后缀名通常是.ashx。 7. ASP.NET 程序生成的文件:当创建ASP...

    北大青鸟asp.net课程总复习

    课程还涵盖了HttpHandler和HttpModule的概念,它们是ASP.NET请求处理的重要组件。HttpHandler是处理特定HTTP请求的终结点,而HttpModule则可以作为HTTP请求生命周期中的过滤器。此外,课程还讨论了Session状态管理,...

    关于静态 伪静态等例子

    3. 使用HttpHandler和HttpModule:自定义HTTP处理器(HttpHandler)或模块(HttpModule)来处理特定的URL请求,实现URL的动态到静态转换。 在实际应用中,静态化和伪静态化的选择往往取决于项目需求。对于内容频繁...

    HttpModule,HttpHandler详细解释

    HttpModule,HttpHandler详细解释

    ASP.NET 2.0快速入门(15):ASP.NET 2.0 的扩展应用

    2. **自定义HttpHandler和HttpModule**:HTTP处理器(HttpHandler)和HTTP模块(HttpModule)是ASP.NET处理请求的关键组件。开发者可以通过编写自定义的HttpHandler来处理特定类型的HTTP请求,比如处理静态文件、流...

    ASP.NET 3.5 网站开发实例教程

    ASP.NET提供了多种方法处理请求,如Page类、HttpHandler和HttpModule。这些组件可以拦截、修改和处理请求,实现动态内容生成和中间件功能。 文件上传和下载是Web应用的常见需求。ASP.NET 3.5提供FileUpload控件用于...

    HttpModule HttpHandler HttpHandlerFactory

    在ASP.NET中,HttpModule和HttpHandler的配置通常在Web.config文件中完成。以下是如何配置HttpModule和HttpHandler的示例: ```xml , MyAssembly"/&gt; *" path="*.myext" type="MyNamespace.MyHandler, ...

    ASP.NET-[图片动画]致远美女图片管理系统(zystudiommcms).zip

    在图片管理方面,系统可能利用了ASP.NET内置的HttpHandler和HttpModule来处理图片请求,实现图片的上传、缩放、裁剪等功能。此外,考虑到动画效果,系统可能使用了GIF或者HTML5的Canvas元素来创建动态图片展示,为...

    《Visual C#.NET Web应用程序设计(第2版)》(程序源代码)

    3. **路由和HTTP处理**:C#中的HttpHandler和HttpModule接口用于处理HTTP请求。源码可能包含这些接口的实现,用于自定义Web应用的行为。 4. **数据库交互**:使用ADO.NET或者Entity Framework进行数据库操作,源码...

Global site tag (gtag.js) - Google Analytics