文章編號: 307996 - 上次校閱: 2001年10月26日 - 版次: 1.0

如何:使用 Visual C# .NET 建立 ASP.NET HTTP 模組

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
本文曾發行於 CHT307996

在此頁中

全部展開 | 全部摺疊

結論

本文將逐步告訴您,如何使用 Visual C# .NET 來建立簡單的自訂 HTTP 模組。本文示範的部份,包括如何建立、部署和設定模組,以及如何針對 Global.asax 檔中的模組而呼叫事件。


實施模組

  1. 建立一個新的 Visual Studio .NET C# Class Library 專案,名為 MyModule。
  2. 設定 System.Web.dll 組譯碼的參照。
  3. 將下述指示詞加入類別中:
    using System.Web;
  4. 將 SyncModule.cs 類別重新命名,然後更改類別定義中的這個部份。
  5. 實施 IHttpModule 介面。您的類別定義將如下所示:
    public class SyncModule : IHttpModule
  6. 決定您要訂閱哪些事件。下面這份清單所列的是 HttpApplication 物件中可供您訂閱的事件:
    • AcquireRequestState :呼叫這個事件,讓模組取得或建立要求的狀態 (例如,工作階段)。
    • AuthenticateRequest :呼叫這個事件,讓安全模組在處理要求之前,先驗證使用者。
    • AuthorizeRequest :如果要求需要經過授權,請由安全模組呼叫這個事件,並且在驗證之後呼叫。
    • BeginRequest :呼叫這個事件來通知模組,已有新的要求開始進行了。
    • Disposed :呼叫這個事件來通知模組,應用程式因某種原因而結束了,讓模組執行內部清除動作。
    • EndRequest :呼叫這個事件來通知模組,即將結束要求了。
    • Error :呼叫這個事件來通知模組,在處理要求時發生錯誤。
    • PostRequestHandlerExecute :呼叫這個事件來通知模組,處理常式已經把要求處理完畢了。
    • PreRequestHandlerExecute :呼叫這個事件來通知模組,即將呼叫該要求的處理常式。
    • PreSendRequestContent :呼叫這個事件來通知模組,內容即將傳到用戶端。
    • PreSendRequestHeaders :呼叫這個事件來通知模組,HTTP 標頭即將傳到用戶端。
    • ReleaseRequestState :呼叫這個事件,讓模組釋放狀態,因為處理常式已經把要求處理完畢了。
    • ResolveRequestCache :在驗證之後呼叫這個事件,讓快取模組利用這個事件,判斷該由快取記憶體還是處理常式來處理這個要求。
    • UpdateRequestCache :您可以在處理常式回應之後,呼叫這個事件。快取模組應該會把這個回應更新到快取記憶體中。
    這個範例是採用 BeginRequest 事件。
  7. 實施 IHttpModule 介面的 Init Dispose 方法,如下所示:
    public void Init(HttpApplication app)
    {
       app.BeginRequest += new EventHandler(OnBeginRequest);
    }
    
    public void Dispose(){ }
  8. 為事件建立一個委派者,如下所示:
    public delegate void MyEventHandler(Object s, EventArgs e);
  9. 定義一個 MyEventHandler 類型的專用本機變數,來存放事件的參照:
    private MyEventHandler _eventHandler = null;
  10. 建立一個事件,將委派者連接到 Global.asax 檔中的方法,或是繼承自 HttpApplication 物件的類別:
    public event MyEventHandler MyEvent
    {
       add { _eventHandler += value; }
       remove { _eventHandler -= value; }
    }
  11. 建立 OnBeginRequest 方法,連接到 HttpApplication BeginRequest 事件:
    public void OnBeginRequest(Object s, EventArgs e)
    {
       HttpApplication app = s as HttpApplication;
       app.Context.Response.Write("Hello from OnBeginRequest in custom module.<br>");
       if(_eventHandler!=null)
          _eventHandler(this, null);
    }
  12. 編譯這個專案。

部署模組

  1. 在 C:\Inetpub\Wwwroot 下,建立一個名為 Module 的新目錄。
  2. 在剛剛建立的 Module 目錄下,建立一個名為 Bin 的子目錄。這麼一來,總路徑就是 C:\Inetpub\Wwwroot\Module\Bin。
  3. 將 MyModule.dll 從您專案的 Bin\Debug 目錄,複製到 C:\Inetpub\Wwwroot\Module\Bin 目錄下。
  4. 執行這些步驟,將新的 Module 目錄指定為 Web 應用程式:
    1. 開啟 [Internet 服務管理員]。
    2. 在 Module 目錄按一下滑鼠右鍵,再按一下 [內容]
    3. [目錄] 索引標籤上,按一下 [建立]
    4. 按一下 [確定] ,關閉 [模組內容] 對話方塊。

設定系統

  1. 在 C:\Inetpub\Wwwroot\Module\ 目錄下,建立一個新檔案 Web.config。
  2. 將下述文字貼到 Web.config 當中:
    <configuration>
       <system.web>
          <httpModules>
             <add name="MyModule" type="MyModule.SyncModule, MyModule" />
          </httpModules>
       </system.web>
    </configuration>

測試模組

  1. 在 C:\Inetpub\Wwwroot\Module 目錄中,建立一個名為 Test.aspx 的新 .aspx 檔。
  2. 將下述文字貼到 Test.aspx 當中:
    <%@Page Language="C#"%>
    <% Response.Write("Hello from Test.aspx.<br>"); %>
  3. 在 C:\Inetpub\Wwwroot\Module 目錄下,建立一個 Global.asax 檔。
  4. 將下述程式碼貼到 Global.asax 當中:
    <%@ Import Namespace="MyModule" %>
    
    <script language="C#" runat=server >
    protected void MyModule_OnMyEvent(Object src, EventArgs e)
    {	
      Context.Response.Write("Hello from MyModule_OnMyEvent called in Global.asax.<br>");
    }
    </script>
  5. 要求顯示 Test.aspx 頁。這時候畫面會出現下面幾行文字:
    Hello from OnBeginRequest in custom module.
    Hello from MyModule_OnMyEvent called in Global.asax.
    Hello from Test.aspx.

參考

其他有關 HttpHandlers 的詳細資訊,請按一下下面的文章編號,檢視這篇 Microsoft Knowledge Base 文章:
307985? (http://support.microsoft.com/kb/307985/EN-US/ ) BETA-INFO: ASP.NET HTTP Modules and HTTP Handlers Overview














本文件是根據 Microsoft Knowledgebase 文件編號 Q307996 翻譯的。若要參考原始英文文件內容,請至以下網址:

http://support.microsoft.com/support/kb/articles/Q307/9/96.asp (http://support.microsoft.com/kb/307996/en-us?ln=en-us&sd=gn&fr=0)

這篇文章中的資訊適用於:
  • Microsoft ASP .NET Beta 2
  • Microsoft Visual C# .NET 2002 Standard Edition
關鍵字:?
kbhowto kbhowtomaster kbhttpruntime kbgrpdsasp KB307996
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。