IHttpHandler和IHttpModule

2024-06-04 05:08
文章标签 ihttphandler ihttpmodule

本文主要是介绍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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1029142

相关文章

ASP.NET MVC用IHttpModule修改response的html实现压缩或者转繁体,IHttpModule用后台代码注册

代码里面实现了html里面中文简体转繁体,用的微软自带的简繁体类库操作,效率高。在FilterStream中,Write方法里面还可以实现压缩html 实现IhttpModule操作模块 using System;using System.Web;namespace OverrideRender.Models{public class MyHttpModule : IHttpModule{

URL重写之实现IHttpHandler接口 .net 2.0实现 (幻想曲作品)

URL重写之实现IHttpHandler接口 .net 2.0实现 (幻想曲作品) 以前用url重写时是用的ms urlrewriter,用了以后发现了很多不足,自定义功能太弱,而且随着重写规则的增加,web.config可能会越来越大,实际上,url重写就是实现IHttpHandler接口.  整个流程分二步走:  1、用一个xml文件来存储重写规则,其中这些规则是一些简单的正则