ASP.NET HTTP模組和處理常式(4)
來源:互聯網
上載者:User
HTTP處理常式中的對話狀態
維護對話狀態是Web應用程式執行的最通常的事務。HTTP處理常式也需要訪問這些對話狀態。但是HTTP處理常式的預設設定是沒有啟用對話狀態的。為了讀取和/或寫入狀態資料,需要HTTP處理常式實現下面的介面之一:
· IRequiresSessionState
· IReadOnlySessionState.
當HTTP處理常式需要讀寫對話資料的時候,它必須實現IRequiresSessionState介面。如果它唯讀取對話資料,實現IReadOnlySessionState介面就可以了。
這兩個介面都是標記介面,並沒有包含任何方法。因此,如果你希望啟用NewHandler處理常式的對話狀態,要像下面的代碼一樣聲明NewHandler類:
public class NewHandler : IHttpHandler, IRequiresSessionState
HTTP模組
HTTP模組是實現了System.Web.IhttpModule介面的.NET組件。這些組件通過在某些事件中註冊自身,把自己插入ASP.NET請求處理管道。當這些事件發生的時候,ASP.NET調用對請求有興趣的HTTP模組,這樣該模組就能處理請求了。
HTTP模組實現了IhttpModule介面的下面一些方法:
方法名稱 描述
Init 這個方法允許HTTP模組向HttpApplication 對象中的事件註冊自己的事件處理常式。
Dispose 這個方法給予HTTP模組在對象被垃圾收集之前執行清理的機會。
HTTP模組可以向System.Web.HttpApplication對象暴露的下面一些方法註冊:
事件名稱 描述
AcquireRequestState 當ASP.NET運行時準備好接收當前HTTP請求的對話狀態的時候引發這個事件。
AuthenticateRequest 當ASP.NET 運行時準備驗證使用者身份的時候引發這個事件。
AuthorizeRequest 當ASP.NET運行時準備授權使用者訪問資源的時候引發這個事件。
BeginRequest 當ASP.NET運行時接收到新的HTTP請求的時候引發這個事件。
Disposed 當ASP.NET完成HTTP請求的處理過程時引發這個事件。
EndRequest 把響應內容發送到用戶端之前引發這個事件。
Error 在處理HTTP請求的過程中出現未處理異常的時候引發這個事件。
PostRequestHandlerExecute 在HTTP處理常式結束執行的時候引發這個事件。
PreRequestHandlerExecute 在ASP.NET開始執行HTTP請求的處理常式之前引發這個事件。在這個事件之後,ASP.NET 把該請求轉寄給適當的HTTP處理常式。
PreSendRequestContent 在ASP.NET把響應內容發送到用戶端之前引發這個事件。這個事件允許我們在內容到達用戶端之前改變響應內容。我們可以使用這個事件給頁面輸出添加用於所有頁面的內容。例如通用菜單、頭資訊或腳資訊。
PreSendRequestHeaders 在ASP.NET把HTTP回應標頭資訊發送給用戶端之前引發這個事件。在頭資訊到達用戶端之前,這個事件允許我們改變它的內容。我們可以使用這個事件在頭資訊中添加cookie和自訂資料。
ReleaseRequestState 當ASP.NET結束所搜有的請求處理常式執行的時候引發這個事件。
ResolveRequestCache 我們引發這個事件來決定是否可以使用從輸出緩衝返回的內容來結束請求。這依賴於Web應用程式的輸出緩衝時怎樣設定的。
UpdateRequestCache 當ASP.NET完成了當前的HTTP請求的處理,並且輸出內容已經準備好添加給輸出緩衝的時候,引發這個事件。這依賴於Web應用程式的輸出緩衝是如何設定的。
除了這些事件之外,我們還可以使用四個事件。我們可以通過實現Web應用程式的global.asax檔案中一些方法來使用這些事件。
這些事件是:
· Application_OnStart
當第一個請求到達Web應用程式的時候引發這個事件。
· Application_OnEnd
準備終止應用程式之前引發這個事件。
· Session_OnStart
使用者對話的第一個請求引發這個事件。
· Session_OnEnd
放棄對話或者對話超期的時候引發這個事件。