ASP.NET的(HttpModule,HttpHandler)_.docx

上传人:PIYPING 文档编号:11625582 上传时间:2021-08-26 格式:DOCX 页数:8 大小:14.33KB
返回 下载 相关 举报
ASP.NET的(HttpModule,HttpHandler)_.docx_第1页
第1页 / 共8页
ASP.NET的(HttpModule,HttpHandler)_.docx_第2页
第2页 / 共8页
ASP.NET的(HttpModule,HttpHandler)_.docx_第3页
第3页 / 共8页
ASP.NET的(HttpModule,HttpHandler)_.docx_第4页
第4页 / 共8页
ASP.NET的(HttpModule,HttpHandler)_.docx_第5页
第5页 / 共8页
亲,该文档总共8页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《ASP.NET的(HttpModule,HttpHandler)_.docx》由会员分享,可在线阅读,更多相关《ASP.NET的(HttpModule,HttpHandler)_.docx(8页珍藏版)》请在三一文库上搜索。

1、ASP.NET的(HttpModule,HttpHandler)_ 在以前的ASP时候,当恳求一个*.asp页面文件的时候,这个HTTP恳求首先会被一个名为inetinfo.exe进程所截获,这个进程事实上就是服务。截获之后它会将这个恳求转交给asp.dll进程,这个进程就会说明这个asp页面,然后将说明后的数据流返回给客户端扫瞄器。其实ASP.DLL是一个依附在IIS的ISAPI文件,它负责了对诸如ASP文件,ASA等文件的说明执行, ASP.NET的HTTP恳求处理方法 当客户端向web服务器恳求一个*.aspx的页面文件时,同asp类似,这个http恳求也会被inetinfo.exe进程

2、截获(服务),它推断文件后缀之后,把这个恳求转交给ASPNET_ISAPI.DLL而ASPNET_ISAPI.DLL则会通过一个Http PipeLine的管道,将这个http恳求发送给ASPNET_WP.EXE进程,当这个HTTP恳求进入ASPNET_WP.EXE进程之后, framework就会通过HttpRuntime来处理这个Http恳求,处理完毕后将结果返回给客户端。 当一个http恳求被送入到HttpRuntime之后,这个Http恳求会连续被送入到一个被称之为HttpApplication Factory的一个容器当中,而这个容器会给出一个HttpApplication实例来处理

3、传递进来的http恳求,而后这个Http恳求会依次进入到如下几个容器中: HttpModule - HttpHandler Factory - HttpHandler 当系统内部的HttpHandler的ProcessRequest方法处理完毕之后,整个Http Request就被处理完成了,客户端也就得到相应的东东了。 完整的http恳求在 framework中的处理流程: HttpRequest-inetinfo.exe-ASPNET_ISAPI.DLL-Http Pipeline-ASPNET_WP.EXE-HttpRuntime-HttpApplication Factory-Http

4、Application-HttpModule-HttpHandler Factory-HttpHandler-HttpHandler.ProcessRequest() 假如想在中途截获一个httpRequest并做些自己的处理,就应当在HttpRuntime运行时内部来做到这一点,准确的说时在HttpModule这个容器中做到这个的。 系统本身的HttpModule实现一个IHttpModule的接口,当然我们自己的类也能够实现IHttpModule接口,这就可以替代系统的HttpModule对象了。 ASP.NET系统中默认的HttpModule: DefaultAuthentication

5、Module 确保上下文中存在 Authentication 对象。无法继承此类。 FileAuthorizationModule 验证远程用户是否具有访问所恳求文件的 NT 权限。无法继承此类。 FormsAuthenticationModule 启用 ASP.NET 应用程序以用法 Forms 身份验证。无法继承此类。 PassportAuthenticationModule 供应环绕 PassportAuthentication 服务的包装。无法继承此类。 SessionStateModule 为应用程序供应会话状态服务。 UrlAuthorizationModule 供应基于 URL

6、的授权服务以允许或拒肯定指定资源的访问。无法继承此类。 WindowsAuthenticationModule 启用 ASP.NET 应用程序以用法 Windows/IIS 身份验证。无法继承此类 这些系统默认的HttpModule是在文件machine.config中配置的,和我们开发时用法到的web.config的关系是:是在ASP.NET FRAMEWORK启动处理一个Http Request的时候,它会依次加载machine.config和恳求页面所在名目的web.config文件,假如在machine中配置了一个自己的HttpModule,你仍旧可以在所在页面的web.config文

7、件中remove掉这个映射关系。 public class HelloWorldModule : IHttpModule public HelloWorldModule() public String ModuleName get return HelloWorldModule; / In the Init function, register for HttpApplication / events by adding your handlers. public void Init(HttpApplication application) application.BeginRequest +

8、= (new EventHandler(this.Application_BeginRequest); application.EndRequest += (new EventHandler(this.Application_EndRequest); private void Application_BeginRequest(Object source, EventArgs e) / Create HttpApplication and HttpContext objects to access / request and response properties. HttpApplicatio

9、n application = (HttpApplication)source; HttpContext context = application.Context; context.Response.Write(h1font color=red HelloWorldModule: Beginning of Request/font/h1hr); private void Application_EndRequest(Object source, EventArgs e) HttpApplication application = (HttpApplication)source; HttpCo

10、ntext context = application.Context; context.Response.Write(hrh1font color=redHelloWorldModule: End of Request/font/h1); public void Dispose() system.web httpModules add name=HelloWorldModule type=HelloWorldModule/ /httpModules /system.web - 深化HttpModule 一个Http恳求在被ASP.NET Framework捕获之后会依次交给HttpModul

11、e以及HttpHandler来处理。hm与hh之间不是完全独立的,事实上,http恳求在hm传递的过程中会在某个大事内将掌握权转交给hh的,而真正的处理在HttpHandler中执行完成后,HttpHandler会再次将掌握权交还给HttpModule 上面的代码中的HttpModule的Init()中的参数是HttpApplication类型,它具有很多大事,包括BeginRequest,EndRequest,AuthentiacteRequest 等等。 - IHttpHandler 它是 Framework供应的一个接口,定义了假如要实现一个Http恳求的处理所需要必需实现的一些系统商定

12、。也就是说,假如你想要自行处理某些类型的HTTP恳求信息流的话,你需要实现这些系统商定才能做到。譬如一个*.aspx文件,用来处理此类型的Http恳求,ASP.NET FRAMEWORK将会交给一个名为System.Web.UI.PageHandlerFactory的HttpHandler类来处理。 HH和HM一样,系统会在最初始由ASP.NET FRAMEWORK首先加载machine.config中的HttpHandler,而后会加载Web应用程序所在名目的web.config中的用户自定义的HttpHandler类。但是系统与我们自定义的HH之间的关系是掩盖的,也就是说假如我们自定义了一

13、个针对*.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容器进行调度和管理的,这样做的优点是大大增加了系统的负荷性,提升了效率。 更多信息请查看IT技术专栏 .

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1