HttpModuler与HttpHandler介绍和简单使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HttpModuler与HttpHandler介绍和简单使用相关的知识,希望对你有一定的参考价值。

参考技术A 当客户端请求一个*文件的时候,这个请求会被 inetinfo.exe (IIS相关的系统组件)进程截获,它判断文件类型后,将这个请求转交给 ASPNET_ISAPI.dll , ASPNET_ISAPI.dll 会通过http管道(Http PipeLine)将请求发送给 ASPNET_WP.exe 进程,在 ASPNET_WP.exe 进程中通过HttpRuntime来处理这个请求,处理完毕将结果返回客户端。

inetinfo.exe 进程:是www服务的进程,IIS服务和ASPNET_ISAPI.DLL都寄存在此进程中。

ASPNET_ISAPI.DLL :是处理.aspx文件的win32组件。其实IIS服务器是只能识别静态文件的,当IIS服务器发现被请求的文件是.aspx文件时,IIS服务器将其交给aspnet_isapi.dll来处理。

aspnet_wp.exe 进程:ASP.NET框架进程,提运行的托管环境的CLR(公共语言运行时)就是寄存在此进程中。

ASP.NET Framework处理一个Http Request的流程:

HttpRequest-->inetinfo.exe-->ASPNET_ISAPI.dll-->ASPNET_WP.exe-->HttpRuntime-->HttpApplication Factory-->HttpApplication-->HttpModule-->HttpHandler Factory-->HttpHandler-->HttpHandler.ProcessRequest()

ASP.NET请求处理过程基于管道模型,管道模型由多个HttpModule和HttpHandler组成(默认19个管道事件),ASP.NET把http请求依次传递给管道中各个HttpModule,最终被HttpHandler处理,处理完成后,再次经过管道中的HTTP模块,把结果返回给客户端,可以在每个HttpModule中都可以干预请求的处理过程。

这里以简单在处理完请求后,输出一些公司的版权信息为例,关于context 可以注册的事件为19个,详细介绍参照图1.ASP.NET管道事件和页面生命周期示意图

然后在Web.config 中配置如下节点System.web节点下:

name 为Moduler的名字,type:有两部分组成,前半部分是命名空间和类名组成的全名,后半部分是程序集名称。

可以在网站的任何一个网页下看到,如下信息:

图一---ASP.NET管道事件和页面生命周期示意图(图片来源于黑马学生)

在httpModule中自定义自己的HttpModule 可以实现登录,权限控制等操作。

HttpHandler是处理客户端的请求上下文的最后步骤,对服务器页面进行编译实例化执行,将处理后的信息返回给客户端,一旦自定义HttpHandler 将覆盖系统的默认HttpHander.

web.config配置:

3.2 注意

ASP.Net处理Http Request时,使用Pipeline(管道)方式,由各个HttpModule对请求进行处理,然后到达 HttpHandler,HttpHandler处理完之后,仍经过Pipeline中各个HttpModule的处理,最后将html发送到客户端浏览 器中。

4 IHttpModule与IHttpHandler的区别整理

1.先后次序.先IHttpModule,后IHttpHandler. 注:Module要看你响应了哪个事件,一些事件是在Handler之前运行的,一些是在Handler之后运行的

2.对请求的处理上:

IHttpModule是属于大小通吃类型,无论客户端请求的是什么文件,都会调用到它;例如aspx,rar,html的请求.

IHttpHandler则属于挑食类型,只有注册过的文件类型(例如aspx,asmx等等)才会轮到调用它.

3.IHttpHandler按照你的请求 生成响应的内容,IHttpModule对请求进行预处理,如验证、修改、过滤等等,同时也可以对响应进行处理

ASP.Net系统本身配置有很多HttpHandler和HttpModule,以处理aspx等.Net标准的页面文件,以及这些页面文件中标 准的事件处理等。查看%System%/Microsoft.NET\Framework\v2.0.50727\CONFIG目录下的 nfig文件中的httpHandlers和httpModules节点,可以看到这些配置。如果有兴趣,可以使用Reflector查 看.Net系统中相关的类和方法,了解.Net如何处理以及做了什么处理。

.Net也提供了一套机制来开发自定义的HttpHandler和 HttpModule,均可以用于对HttpRequest的截取,完成自定义的处理。 HttpModule 继承System.Web.IHttpModule接口,实现自己的HttpModule类。必须要实现接口的两个方法:Init和Dispose。在 Init中,可以添加需要截取的事件;Dispose用于资源的释放,如果在Init中创建了自己的资源对象,请在Dispose中进行释放。

以上参考: http://www.educity.cn/develop/474379.html

以上是关于HttpModuler与HttpHandler介绍和简单使用的主要内容,如果未能解决你的问题,请参考以下文章

#.NET EF中HttpModule与HttpHandler对象的基本使用

#.NET EF中HttpModule与HttpHandler对象的基本使用

#.NET EF中HttpModule与HttpHandler对象的基本使用

HttpHandler(处理程序) 和 HttpModule(托管模块)

HttpHandler与HttpModule的理解与应用

注册URL模式与HttpHandler的映射关系