深入Http Module
一个Http 请求在被ASP.NET Framework捕获之后会依次交给Http Module以及Http Handler来处理。hm与hh之间不是完全独立的,实际上,Http 请求在hm传递的过程中会在某个事件内将控制权转交给hh的,而真正的处理在Http Handler中执行完成后,Http Handler会再次将控制权交还给Http Module
上面的代码中的Http Module的Init()中的参数是Http Application类型,它具有许多事件,包括BeginRequest,EndRequest,AuthentiacteRequest等等。
IHttp Handler
它是ASP.NET Framework提供的一个接口,定义了如果要实现一个Http 请求的处理所需要必须实现的一些系统约定。也就是说,如果你想要自行处理某些类型的Http 请求信息流的话,你需要实现这些系统约定才能做到。譬如一个*.aspx文件,用来处理此类型的Http 请求,ASP.NET Framework将会交给一个名为System.Web.UI.PageHandlerFactory的Http Handler类来处理。
HH和HM一样,系统会在最初始由ASP.NET Framework首先加载machine.config中的Http Handler,而后会加载Web应用程序所在目录的web.config中的用户自定义的Http Handler类。但是系统与我们自定义的HH之间的关系是"覆盖"的,也就是说如果我们自定义了一个针对"*.aspx"的Http Handler类的话,那么系统会将对此Http 请求的处理权完全交给我们自己定义的这个Http Handler类来处理,而我们自己的Http Handler类则需要自己完全解析这个Http 请求,并作出处理。
IHttp Handler接口中最重要的方法ProcessRequest,这个方法就是Http Handler用来处理一个Http 请求,当一个Http 请求经过由Http Module容器传递到Http Handler容器中的时候,Framework会调用Http Handler的ProcessRequest方法来做对这个Http 请求做真正的处理。
Framework实际上并不是直接把相关页面的Http 请求定位到一个内部默认的IHttp Handler容器之上的,而是定位到了其内部默认的IHttp HandlerFactory上了。IHttp HandlerFactory的作用就是对很多系统已经实现了的IHttp Handler容器进行调度和管理的,这样做的优点是大大增强了系统的负荷性,提升了效率。
【编辑推荐】