在之前的文章中,我们提到过P_Module(HttpModule)这个能干的程序员哥们儿,它通过在项目经理 HttpApplication那里得到的授权,插手整个应用程序级别的事件处理。所有的HttpModule都要实现 IHttpModule接口,那么我们看IHttpModule的定义:
namespace System.Web
{
public interface IHttpModule
{
void Dispose();
void Init(HttpApplication context);
}
}
可以看到,HttpModule 主要就做了两件事,一个就是大家都明白的释放资源Dispose(),另一个则是 初始化。用什么初始化呢?当然是HttpApplication。刚才已经说过,P_Module程序员是经过了项目经理 HttpApplication的授权了的,这里我们就可以看到,初始化方法参数就是 HttpApplication对象,那么 HttpModule又是怎么处理应用程序级别的事件的呢?且看:
我们可以看到,项目经理HttpApplication可是实实在在的放权啊,它非常的相信P_Module可以做好这 些事情,所以在初始化方法 Init(HttpApplication context)中,程序员P_Module可以注册很多事件,比 如说常用的BeginRequest, EndRequest, AuthenticateRequest, AuthorizeRequest等等,还有一些其它 的不常用的事件我们就不再赘述。总而言之,HttpModule强大到可以插手整个应用程序周期的所有事件- --因为得到了充分授权嘛。下面是注册BeginRequest事件示例代码:
public void Init(HttpApplication context)
{
context.EndRequest+= new EventHandler(context_EndRequest);
}
private void context_EndRequest(object sender, EventArgs e)
{
//do something when the request end
}