天天看點

HTTP Module的實作

有兩種方法,本質是一樣的。一種是寫代碼,把實作IHttpModule接口的類放在App_Code檔案夾中。還有一種方法是直接把該類放到一個項目中,編譯後得到的dll放入Bin檔案夾。

具體步驟如下:

實作 <b>IHttpModule</b> 接口。您的類定義應如下所示:

public class HelloWorldModule: IHttpModule

決定要預訂哪些事件。下表概括了可從 <b>HttpApplication</b> 對象預訂的事件:

<b>AcquireRequestState</b>:調用此事件可允許子產品擷取或建立請求的狀态(例如,會話)。

<b>AuthenticateRequest</b>:當安全子產品在處理請求前需要對使用者進行身份驗證時,調用此事件。

<b>AuthorizeRequest</b>:當請求需要經過授權時,安全子產品就會調用此事件。此事件是在身份驗證後調用的。

<b>BeginRequest</b>:調用此事件以通知子產品新請求即将開始。

<b>Disposed</b>:調用此事件以通知子產品由于某種原因應用程式即将終止。允許子產品進行内部清理。

<b>EndRequest</b>:調用此事件以通知子產品該請求即将結束。

<b>Error</b>:調用此事件以通知子產品在請求處理過程中發生了錯誤。

<b>PostRequestHandlerExecute</b>:調用此事件以通知子產品處理程式已完成對請求的處理。

<b>PreRequestHandlerExecute</b>:調用此事件以通知子產品将調用用于處理請求的處理程式。

<b>PreSendRequestContent</b>:調用此事件以通知子產品将向用戶端發送請求内容。

<b>PreSendRequestHeaders</b>:調用此事件以通知子產品将向用戶端發送 HTTP 頭。

<b>ReleaseRequestState</b>:調用此事件以允許子產品在處理程式完成對請求的處理後釋放狀态。

<b>ResolveRequestCache</b>:在身份驗證後調用此事件。緩存子產品使用此事件确定該請求是否應該由其緩存處理,或者處理程式是否應該處理該請求。

<b>UpdateRequestCache</b>:在處理程式響應後調用此事件。緩存子產品應根據該響應來更新其緩存。

本示例使用了 <b>BeginRequest</b> 事件。

按以下方式實作 <b>IHttpModule</b> 接口的 <b>Init</b> 和 <b>Dispose</b> 方法:

public void Init(HttpApplication application) 

   { 

       application.BeginRequest += 

           (new EventHandler(this.Application_BeginRequest)); 

       application.EndRequest += 

           (new EventHandler(this.Application_EndRequest)); 

   }

public void Dispose(){ }

定義這兩個事件方法:

private void Application_BeginRequest(Object source, 

         EventArgs e) 

    { 

        HttpApplication application = (HttpApplication)source; 

        HttpContext context = application.Context; 

            context.Response.Write("&lt;h1&gt;&lt;font color=red&gt;" + 

                "HelloWorldModule: Beginning of Request" + 

                "&lt;/font&gt;&lt;/h1&gt;&lt;hr&gt;"); 

    }

    private void Application_EndRequest(Object source, EventArgs e) 

         HttpApplication application = (HttpApplication)source; 

            context.Response.Write("&lt;hr&gt;&lt;h1&gt;&lt;font color=red&gt;" + 

                "HelloWorldModule: End of Request&lt;/font&gt;&lt;/h1&gt;"); 

配置web.config檔案

&lt;configuration&gt;

&lt;system.web&gt;

&lt;httpModules&gt;

&lt;add name="HelloWorldModule" type="HelloWorldModule"/&gt; 如果用的是引用項目的話,&lt;add name="HelloWorldModule" type="HelloWorldModule.HelloWorldModule,HelloWorldModule"/&gt;

&lt;/httpModules&gt;

&lt;/system.web&gt;

&lt;/configuration&gt;

然後在執行頁面的時候,都會執行這2個注冊的事件。

本文轉自cnn23711151CTO部落格,原文連結: http://blog.51cto.com/cnn237111/591824,如需轉載請自行聯系原作者

繼續閱讀