HttpModule初体验


Posted on November 14, 2008


研究伪静态的同时,也发出另一个东东,HttpModule,是向实现类提供模块初始化和处置事件,ASP.NET确实很强大

首先你要实现IHttpModule接口这个接口只有两个方法,一个是Init方法一个Dispose方法.一看方法的名字就知道了这两个方法一个是在加载前调用的,一个是Dispose时调用的(页面最后处理的一个事件)

public void Init(HttpApplication context);
public void Dispose();

Init():这个方法接受一个HttpApplication对象,HttpApplication代表了当前的应用程序,我们需要在这个方法内注册 HttpApplication对象暴露给客户端的事件。可见,这个方法仅仅是用来对事件进行注册,而实际的事件处理程序,需要我们另外写方法。

整个过程很好理解:

  1. 当站点第一个资源被访问的时候,Asp.Net会创建HttpApplication类的实例,它代表着站点应用程序,同时会创建所有在Web.Config中注册过的Module实例。
  2. 在创建Module实例的时候会调用Module的Init()方法。
  3. 在Init()方法内,对想要作出响应的HttpApplication暴露出的事件进行注册。(仅仅进行方法的简单注册,实际的方法需要另写)。
  4. HttpApplication在其应用程序周期中触发各类事件。
  5. 触发事件的时候调用Module在其Init()方法中注册过的方法。

Dispose():它可以在进行垃圾回收之前进行一些清理工作。

综上所述:实现一个 IHttpModule 的模板一般是这样的:

public class HelloWorldModule:IHttpModule
{
    public void Init(HttpApplication context) {
       // 注册HttpApplication应用程序 BeginRequest 事件
       // 也可以是其他任何HttpApplication暴露出的事件
       context.BeginRequest += new EventHandler(context_BeginRequest);
    }

    void context_BeginRequest(object sender, EventArgs e) {
       HttpApplication application = (HttpApplication)sender;
       HttpContext context = application.Context;
       // 做些实际的工作,HttpContext对象都获得了,剩下的基本可以自由发挥了
    }

    public void Dispose() {
    }
}

 context到底有多少事件呢?

   BeginRequest
   指示请求处理开始。
  
  AuthenticateRequest
  
  PostAuthenticateRequest
   封装请求身份验证过程。
  
  AuthorizeRequest
  
  PostAuthorizeRequest
   封装请求授权过程。
  
  ResolveRequestCache
  
  PostResolveRequestCache 
  封装检查是否能利用以前缓存的输出页面处理请求的过程。
  
  PostMapRequestHandler 
  指示已发现用于处理请求的 HTTP 处理程序。
  
  AcquireRequestState
  
  PostAcquireRequestState 
  封装对请求会话状态的检索。
  
  PostRequestHandlerExecute 
  指示用于处理请求的 HTTP 处理程序已执行。
  
  ReleaseRequestState
  
  PostReleaseRequestState 
  封装对请求会话状态的发布。
  
  UpdateRequestCache
  
  PostUpdateRequestCache 
  封装检查是否应对请求的资源的输出进行缓存以备今后重复使用的过程。
  
  EndRequest 
  指示请求处理结束。

这种方法我想最适合进行身份验证了,绝对可以省不少代码~~~

还有一篇文章,可以参考一下:http://www.tracefact.net/Asp-Net/Introduction-to-Http-Module.aspx


标签:N/A

 

在线学习答案查询入口
微信扫码联系
微信扫码联系