溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

ASP.NET的HTTP模塊和處理程序?qū)υ挔顟B(tài)是怎樣的

發(fā)布時間:2021-12-06 15:31:03 來源:億速云 閱讀:98 作者:iii 欄目:編程語言

這篇文章主要介紹“ASP.NET的HTTP模塊和處理程序?qū)υ挔顟B(tài)是怎樣的”,在日常操作中,相信很多人在ASP.NET的HTTP模塊和處理程序?qū)υ挔顟B(tài)是怎樣的問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”ASP.NET的HTTP模塊和處理程序?qū)υ挔顟B(tài)是怎樣的”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

HTTP處理程序中的對話狀態(tài)

維護(hù)對話狀態(tài)是Web應(yīng)用程序執(zhí)行的最通常的事務(wù)。HTTP處理程序也需要訪問這些對話狀態(tài)。但是HTTP處理程序的默認(rèn)設(shè)置是沒有激活對話狀態(tài)的。為了讀取和/或?qū)懭霠顟B(tài)數(shù)據(jù),需要HTTP處理程序?qū)崿F(xiàn)下面的接口之一:

· IRequiresSessionState

· IReadOnlySessionState.

當(dāng)HTTP處理程序需要讀寫對話數(shù)據(jù)的時候,它必須實現(xiàn)IRequiresSessionState接口。如果它只讀取對話數(shù)據(jù),實現(xiàn)IReadOnlySessionState接口就可以了。

這兩個接口都是標(biāo)記接口,并沒有包含任何方法。因此,如果你希望激活NewHandler處理程序的對話狀態(tài),要像下面的代碼一樣聲明NewHandler類:

public class NewHandler : IHttpHandler, IRequiresSessionState

HTTP模塊

HTTP模塊是實現(xiàn)了System.Web.IhttpModule接口的.NET組件。這些組件通過在某些事件中注冊自身,把自己插入ASP.NET請求處理管道。當(dāng)這些事件發(fā)生的時候,ASP.NET調(diào)用對請求有興趣的HTTP模塊,這樣該模塊就能處理請求了。

HTTP模塊實現(xiàn)了IhttpModule接口的下面一些方法:

方法名稱描述
Init這個方法允許HTTP模塊向HttpApplication 對象中的事件注冊自己的事件處理程序。
Dispose這個方法給予HTTP模塊在對象被垃圾收集之前執(zhí)行清理的機(jī)會。

HTTP模塊可以向System.Web.HttpApplication對象暴露的下面一些方法注冊:

事件名稱描述
AcquireRequestState當(dāng)ASP.NET運行時準(zhǔn)備好接收當(dāng)前HTTP請求的對話狀態(tài)的時候引發(fā)這個事件。
AuthenticateRequest當(dāng)ASP.NET 運行時準(zhǔn)備驗證用戶身份的時候引發(fā)這個事件。
AuthorizeRequest當(dāng)ASP.NET運行時準(zhǔn)備授權(quán)用戶訪問資源的時候引發(fā)這個事件。
BeginRequest當(dāng)ASP.NET運行時接收到新的HTTP請求的時候引發(fā)這個事件。
Disposed當(dāng)ASP.NET完成HTTP請求的處理過程時引發(fā)這個事件。
EndRequest把響應(yīng)內(nèi)容發(fā)送到客戶端之前引發(fā)這個事件。
Error在處理HTTP請求的過程中出現(xiàn)未處理異常的時候引發(fā)這個事件。
PostRequestHandlerExecute在HTTP處理程序結(jié)束執(zhí)行的時候引發(fā)這個事件。
PreRequestHandlerExecute在ASP.NET開始執(zhí)行HTTP請求的處理程序之前引發(fā)這個事件。在這個事件之后,ASP.NET 把該請求轉(zhuǎn)發(fā)給適當(dāng)?shù)腍TTP處理程序。
PreSendRequestContent在ASP.NET把響應(yīng)內(nèi)容發(fā)送到客戶端之前引發(fā)這個事件。這個事件允許我們在內(nèi)容到達(dá)客戶端之前改變響應(yīng)內(nèi)容。我們可以使用這個事件給頁面輸出添加用于所有頁面的內(nèi)容。例如通用菜單、頭信息或腳信息。
PreSendRequestHeaders在ASP.NET把HTTP響應(yīng)頭信息發(fā)送給客戶端之前引發(fā)這個事件。在頭信息到達(dá)客戶端之前,這個事件允許我們改變它的內(nèi)容。我們可以使用這個事件在頭信息中添加cookie和自定義數(shù)據(jù)。
ReleaseRequestState當(dāng)ASP.NET結(jié)束所搜有的請求處理程序執(zhí)行的時候引發(fā)這個事件。
ResolveRequestCache我們引發(fā)這個事件來決定是否可以使用從輸出緩沖返回的內(nèi)容來結(jié)束請求。這依賴于Web應(yīng)用程序的輸出緩沖時怎樣設(shè)置的。
UpdateRequestCache當(dāng)ASP.NET完成了當(dāng)前的HTTP請求的處理,并且輸出內(nèi)容已經(jīng)準(zhǔn)備好添加給輸出緩沖的時候,引發(fā)這個事件。這依賴于Web應(yīng)用程序的輸出緩沖是如何設(shè)置的。

除了這些事件之外,我們還可以使用四個事件。我們可以通過實現(xiàn)Web應(yīng)用程序的global.asax文件中一些方法來使用這些事件。

這些事件是:

· Application_OnStart

當(dāng)***個請求到達(dá)Web應(yīng)用程序的時候引發(fā)這個事件。

· Application_OnEnd

準(zhǔn)備終止應(yīng)用程序之前引發(fā)這個事件。

· Session_OnStart

用戶對話的***個請求引發(fā)這個事件。

· Session_OnEnd

放棄對話或者對話超期的時候引發(fā)這個事件。

到此,關(guān)于“ASP.NET的HTTP模塊和處理程序?qū)υ挔顟B(tài)是怎樣的”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI