共用方式為


ASP.NET HTTP 模組和 HTTP 處理程式

本文介紹 ASP.NET 超文本傳輸通訊協定 (HTTP) 模組和 HTTP 處理程式。

原始產品版本: ASP.NET
原始 KB 編號: 307985

摘要

HTTP 模組和 HTTP 處理程式是 ASP.NET 架構不可或缺的一部分。 處理要求時,每個要求都會由多個 HTTP 模組處理 (例如,驗證模組和會話模組) ,然後由單一 HTTP 處理程式處理。 處理程序處理要求之後,要求會透過 HTTP 模組回流。

HTTP 模組概觀

模組會在處理程序執行之前和之後呼叫。 模組可讓開發人員攔截、參與或修改每個個別要求。 模組會實 IHttpModule 作 位於命名空間中的 System.Web 介面。

HTTP 模組可以同步處理的可用事件

類別 HttpApplication 提供一些模組可以同步處理的事件。 下列事件可供模組在每個要求上與 同步處理。 這些事件會依循序列出:

  • BeginRequest:要求已啟動。 例如,如果您需要在要求 (的開頭執行某些動作,請在每個頁面頂端顯示廣告橫幅) ,並同步處理此事件。

  • AuthenticateRequest:例如,如果您想要插入自己的自定義驗證配置 (,請針對資料庫查閱使用者以驗證密碼) 、建置同步處理此事件的模組,並以您想要的方式驗證使用者。

  • AuthorizeRequest:此事件會在內部用來實作授權機制 (例如,將訪問控制清單儲存 (ACL) 資料庫中,而不是文件系統) 中。 雖然您可以覆寫此事件,但執行此動作的理由並不多。

  • ResolveRequestCache:此事件會判斷是否可以從輸出快取提供頁面。 例如,如果您想要撰寫自己的快取模組 (,請建置檔案型快取,而不是記憶體快取) ,請同步處理此事件,以判斷是否要從快取提供頁面。

  • AcquireRequestState:工作階段狀態是從狀態存放區擷取。 如果您想要建置自己的狀態管理模組,請同步處理此事件,以從狀態存放區抓取會話狀態。

  • PreRequestHandlerExecute:此事件會在執行 HTTP 處理程式之前發生。

  • PostRequestHandlerExecute:此事件會在執行 HTTP 處理程式之後發生。

  • ReleaseRequestState:工作階段狀態會儲存回狀態存放區。 如果您要建置自定義會話狀態模組,則必須將狀態儲存回狀態存放區。

  • UpdateRequestCache:此事件會將輸出寫回輸出快取。 如果您要建置自定義快取模組,請將輸出寫回快取。

  • EndRequest:要求已完成。 您可能想要建置偵錯模組,以收集整個要求中的資訊,然後將資訊寫入頁面。

下列事件可供模組針對每個要求傳輸進行同步處理。 這些事件的順序不具決定性。

  • PreSendRequestHeaders:此事件會在標頭傳送之前發生。 如果您想要新增其他標頭,您可以從自訂模組同步處理此事件。

  • PreSendRequestContent:呼叫 方法時, Response.Flush 就會發生此事件。 如果您想要新增其他內容,您可以從自訂模組同步處理此事件。

  • Error:發生未處理的例外狀況時,就會發生此事件。 如果您要撰寫自定義錯誤處理程式模組,請同步處理此事件。

設定 HTTP 模組

<httpModules> 態區段處理程式負責在應用程式內設定 HTTP 模組。 它可以在計算機、月臺或應用層級宣告。 針對區段處理程式使用下列語法 <httpModules>

<httpModules>
    <add type="[COM+ Class], [Assembly]" name="[ModuleName]" />
    <remove type="[COM+ Class], [Assembly]" name="[ModuleName]" />
    <clear />
</httpModules>

建立 HTTP 模組

若要建立 HTTP 模組,您必須實作 IHttpModule 介面。 介面 IHttpModule 有兩個具有下列簽章的方法:

void Init(HttpApplication);
void Dispose();

HTTP 處理程式概觀

處理程式可用來處理個別端點要求。 處理程式可讓 ASP.NET 架構處理應用程式內的個別 HTTP URL 或 URL 擴充群組。 不同於模組,只會使用一個處理程序來處理要求。 所有處理程式都會實 IHttpHandler 作 位於中的 System.Web namespace介面。 處理程式類似於因特網伺服器應用程式開發介面 (ISAPI) 延伸模組。

設定 HTTP 處理程式

<httpHandlers> 態區段處理程式負責將傳入 URL 對應至 IHttpHandlerIHttpHandlerFactory 類別。 它可以在計算機、月臺或應用層級宣告。 子目錄會繼承這些設定。

系統管理員會使用 <add> tag 指示詞來設定 區 <httpHandlers> 段。 <Add> 指示詞會依上而下順序解譯和處理。 針對區段處理程式使用下列語法 <httpHandler>

<httpHandlers>
    <add verb="[verb list]" path="[path/wildcard]" type="[COM+ Class], [Assembly]" validate="[true/false]" />
    <remove verb="[verb list]" path="[path/wildcard]" />
    <clear />
</httpHandlers>

建立 HTTP 處理程式

若要建立 HTTP 處理程式,您必須實作 IHttpHandler 介面。 介面 IHttpHandler 有一個方法和一個具有下列簽章的屬性:

void ProcessRequest(HttpContext);
bool IsReusable {get;}

注意事項

如果您的 HTTP 處理程式需要工作階段狀態,您也需要實作 IRequiresSessionState 介面。