1. 程式人生 > >管線事件

管線事件

cat 第一次 size 重要 style sts 事件 多功能 config

asp.net生命周期的管道事件-ihttpmodule,在客戶端發送請求的時候,是要通過asp.net的管道事件

原理

1.HTTP.SYS(是操作系統的核心組件,能夠讓任何應用程序通過它提供的接口,以http協議進行信息通訊)接收到Http請求[是對該web應用的第一次訪問]

2.AppDomianFactory為該web應用創建一個應用程序域(AppDomain)

3.IsapiRuntime運行時被加載,首先它會創建一個IsapiWorkerRequest對象(用於封裝Http請求)並傳遞給HttpRuntime,至此正式進入管道

4.HttpRuntime會創建表示Http請求的上下文對象:HttpContext

5.HttpRuntime會利用HttpApplicationFactory創建新的或者獲取現有的HttpApplication對象(ASP.NET維護著一個HttpApplication對象池,HttpApplicationFactory從池中選取可用的HttpApplication用戶處理HTTP請求,處理完畢後將其釋放到對象池中。HttpApplicationFactory負責處理當前的HTTP請求。)

6.在HttpApplication初始化過程中,會根據配置文件加載並初始化相應的HttpModule對象(對於HttpApplication來說,在它處理HTTP請求的不同的階段會觸發不同的事件(Event),而HttpModule的意義在於通過註冊HttpApplication的相應的事件,將所需的操作註入整個HTTP請求的處理流程。ASP.NET的很多功能,比如身份驗證、授權、緩存等,都是通過相應的HttpModule實現的。)

7.最終完成對HTTP請求的處理實現在另一個重要的對象中:HttpHandler,對於不同的資源類型,具有不同的HttpHandler。

技術分享

管線事件簡易說明

在asp.net的頁面生命周期裏面,一共有24個管線事件,完整的管線事件可參考MSDN文檔:

在處理該請求時將由 HttpApplication 類執行以下事件。 希望擴展 HttpApplication 類的開發人員尤其需要註意這些事件。
1. 對請求進行驗證,將檢查瀏覽器發送的信息,並確定其是否包含潛在惡意標記。 有關更多信息,請參見 ValidateRequest 和腳本侵入概述。
2. 如果已在 Web.config 文件的 UrlMappingsSection 節中配置了任何 URL,則執行 URL 映射。
3. 引發 BeginRequest 事件。
4. 引發 AuthenticateRequest 事件。
5. 引發 PostAuthenticateRequest 事件。
6. 引發 AuthorizeRequest 事件。
7. 引發 PostAuthorizeRequest 事件。
8. 引發 ResolveRequestCache 事件。
9. 引發 PostResolveRequestCache 事件。
10. 根據所請求資源的文件擴展名(在應用程序的配置文件中映射),選擇實現 IHttpHandler 的類,對請求進行處理。 如果該請求針對從 Page 類派生的對象(頁),並且需要對該頁進行編譯,則 ASP.NET 會在創建該頁的實例之前對其進行編譯。
11. 引發 PostMapRequestHandler 事件。
12. 引發 AcquireRequestState 事件。
13. 引發 PostAcquireRequestState 事件。
14. 引發 PreRequestHandlerExecute 事件。
15. 為該請求調用合適的 IHttpHandler 類的 ProcessRequest 方法(或異步版 IHttpAsyncHandler.BeginProcessRequest)。 例如,如果該請求針對某頁,則當前的頁實例將處理該請求。 
16. 引發 PostRequestHandlerExecute 事件。
17. 引發 ReleaseRequestState 事件。
18. 引發 PostReleaseRequestState 事件。
19. 如果定義了 Filter 屬性,則執行響應篩選。
20. 引發 UpdateRequestCache 事件。
21. 引發 PostUpdateRequestCache 事件。
22. 引發 EndRequest 事件。
23. 引發 PreSendRequestHeaders 事件。
24. 引發 PreSendRequestContent 事件。

Asp.net管線事件說明

管線事件