ASP.NET本质论
上QQ阅读APP看书,第一时间看更新

2.3.1 通过IHttpModule创建HttpApplication的事件处理程序

在ASP.NET中,定义在System.Web命名空间下的IHttpModule接口专门用来定义HttpApplication对象的事件处理。

实现IHttpModule接口的类称为HttpModule。IHttpModule接口的定义如下,其中仅仅包含两个成员:

public interface IHttpModule
{
  void Dispose()
  void Init(HttpApplication context)
}

其中,Dispose方法用于回收Module所使用的非托管资源,如果没有的话,直接返回即可。

最重要的是Init方法,可以看到,这个方法接收一个HttpApplication类型的参数,在ASP.NET中,每当创建一个HttpApplication对象实例,将遍历注册的HttpModule类型,通过反射,依次创建每个注册HttpModule类型的一个实例对象,并将这个HttpApplication实例通过Init方法传递给各个HttpModule,这样HttpModule就可以在第一时间完成针对HttpApplication对象的事件注册了。

例如,希望写一个处理 PostAuthenticateRequest事件的HttpModule,那么,可以如下完成事件的注册:

public void Init(System.Web.HttpApplication application)
{
  application.PostAuthenticateRequest
    += new EventHandler(Application_PostAuthenticateRequest);
}