天天看點

HttpModule到底是幹什麼的呢?

 HttpModule是向實作類提供子產品初始化和處置事件。

  首先你要實作IHttpModule接口這個接口隻有兩個方法,一個是Init方法一個Dispose方法.一看方法的名字就知道了這兩個方法一個是在加載前調用的,一個是Dispose時調用的(頁面最後處理的一個事件).

  下面代碼說明了如何在所有的頁面加載之前和結束寫入一段文字:

  using System;

  using System.Data;

  using System.Configuration;

  using System.Web;

  using System.Web.Security;

  using System.Web.UI;

  using System.Web.UI.WebControls;

  using System.Web.UI.WebControls.WebParts;

  using System.Web.UI.HtmlControls;

  /// <summary>

  /// HelloWorldModule 的摘要說明

  /// </summary>

  public class HelloWorldModule : IHttpModule

  {

  public HelloWorldModule()

  {

  //

  // TODO: 在此處添加構造函數邏輯

  //

  }

   string str = "";

   public String ModuleName

   {

   get { return "HelloWorldModule"; }

   }

   public void Init(HttpApplication application)

   {

   //注冊頁面請求開始和結束事件

   application.BeginRequest +=

   (new EventHandler(this.Application_BeginRequest));

   application.EndRequest +=

   (new EventHandler(this.Application_EndRequest));

   }

   private void Application_BeginRequest(Object source, EventArgs e)

   {

   //在頁面開始請求前寫入一段文字

   HttpApplication application = (HttpApplication)source;

   HttpContext context = application.Context;

   context.Response.Write(@"<h1><font color=red>

   HelloWorldModule: Beginning of Request

   </font></h1><hr>"+

   application.Request.QueryString.Count.ToString());

   }

   private void Application_EndRequest(Object source, EventArgs e)

   {

   //頁面請求結束後寫入一段文字

   HttpApplication application = (HttpApplication)source;

   HttpContext context = application.Context;

   context.Response.Write(@"<hr><h1><font color=red>HelloWorldModule: End of Request</font></h1>");

   }

   public void Dispose()

   {

   }

  }

  在web.config增加下面配置:

  <httpModules>

  <add name="HelloWorldModule" type="HelloWorldModule"/>

  </httpModules>

  上面是個小例子.那我們可以在這裡做多少件事情呢?看下面的表就可以得出結論.

  事件

   說明

  BeginRequest

   訓示請求處理開始。

  AuthenticateRequest

  PostAuthenticateRequest

   封裝請求身份驗證過程。

  AuthorizeRequest

  PostAuthorizeRequest

   封裝請求授權過程。

  ResolveRequestCache

  PostResolveRequestCache

   封裝檢查是否能利用以前緩存的輸出頁面處理請求的過程。

  PostMapRequestHandler

   訓示已發現用于處理請求的 HTTP 處理程式。

  AcquireRequestState

  PostAcquireRequestState

   封裝對請求會話狀态的檢索。

  PostRequestHandlerExecute

   訓示用于處理請求的 HTTP 處理程式已執行。

  ReleaseRequestState

  PostReleaseRequestState

   封裝對請求會話狀态的釋出。

  UpdateRequestCache

  PostUpdateRequestCache

   封裝檢查是否應對請求的資源的輸出進行緩存以備今後重複使用的過程。

  EndRequest

   訓示請求處理結束。

  我們可以根據相應的事件來進行處理.

繼續閱讀