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 對應至 IHttpHandler
或 IHttpHandlerFactory
類別。 它可以在計算機、月臺或應用層級宣告。 子目錄會繼承這些設定。
系統管理員會使用 <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
介面。