在之前的文章中,我們提到過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
}