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
介面。 處理程式類似於 Internet Server 應用程式開發介面 (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
介面。