本文主要是介绍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中处理。
这篇关于IHttpHandler和IHttpModule的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!