IHttpHandler和IHttpModule

一、概述

 .NET Framework提供了一系列的接口和类,允许对Http请求进行自定义编程,而实现这一操作的主要接口,就是IHttpHandler和IHttpModule。所有的Http请求通过HttpHandler处理中心来处理的,用户发起一个Http请求,.NET Framework调用HttpHandler的ProcessRequest方法对请求进处理,并将处理过后的结果信息附加在Http请求信息流中返回到HtttpModule中。

.NET为asp.net提供了很多系统默认HttpHandler类,用来适应不同类型的HttpRequest。它根据文件名后缀把不同的请求转交给不同的处理程序。但是仔细看看就会发现:几乎一大半的文件都交给aspnet_isapi.dll去处理了。可以在电脑上C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\ 目录下的web.config 文件下查看系统预定义的HttpHandler处理方式。比如aspx,在web.config中是这样定义的: 

<add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory"/> 
这就说明遇到aspx的Request请求,asp.net会将其交给System.Web.UI.PageHandlerFactory的HttpHandler类来处理。 

二、IHttpHandler介绍

IHttpHandler:定义ASP.NET为使用自定义HTTP处理程序同步处理HTTP Web请求而实现的协定。

IHttpHandler接口只有两个成员:
    IsReusable标识该IHttpHandler实例能否被其他请求使用。
    ProcessRequest是具体的自定义处理HTTP Web请求方法。

三、IHttpModule介绍

IHttpModule:向实现类提供模块初始化和处置事件。

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

四、IHttpModule与IHttpHandler的区别

1.执行顺序,先IHttpModule,后IHttpHandler,再IHttpModule。

2.对请求的处理不同:

        IHttpModule无论客户端请求的是什么文件,都会调用到它;例如aspx,rar,html的请求.
        IHttpHandler只有ASP.net注册过的文件类型(例如aspx,asmx等等)才会轮到调用它.

四、IHttpModule与IHttpHandler处理请求流程

当用户再浏览器发起一个http请求,首先会经过HttpModule处理,然后判断请求的文件类型,把这个请求转交给aspnet_isapi.dll而aspnet_isapi.dll则会根据文件后缀来决定交给哪一个HttpHandle类来处理,当HttpHandle类内部的ProcessRequest方法处理完毕之后,再反交给HttpModule,由HttpModule返回给客户端,至此整个Http 请求就被处理完成了。
完整的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运行时内部来做到这一点,确切的说时在HttpHandler这个容器中做到这个的。

五、实例

1.创建自定义IHttpModule类MyModule

2.创建自定义IHttpHandler类MyHandler

3.在web.config中注册

当http请求为.dz类型的文件的时候,都会在自定义的MyHandler中处理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章