ASP.NET頁面請求處理介紹
HttpRuntime類
頁面請求先給可以處理原始HTTP請求的對象處理,最后在管線的終端生成要發(fā)給瀏覽器的標記。HttpRuntime類是改管道的入口點。
對每一個請求,ASP.NET會創(chuàng)建HttpRuntime對象,并調(diào)用ProcessRequest來激活該HTTP管道。HttpRuntime對象會在創(chuàng)建時對許多輔助處理頁面請求的內(nèi)部對象進行初始化。ProcessRequest方法被調(diào)用后,會創(chuàng)建HttpContext類實例,他封裝了所有的HTTP提有的信息,我們一般在代碼中使用就是這個HttpContext對象,他就是由HttpRuntime對象創(chuàng)建的。HttpRuntime對象使用請求信息鎖定能夠處理請求的Web應(yīng)用程序?qū)ο?。通過URL中的虛擬路徑,便可以定位Web應(yīng)用程序,但是真正鎖定能處理請求的Web應(yīng)用程序的對象是HttpApplicationFactory。會返回能處理請求的有效對象。HttpRuntime對象會先生成HttpContext對象,然后把HttpContext對象傳給HttpApplicationFactory對象,委托她確定能處理請求的應(yīng)用程序。在應(yīng)用程序的生命周期中,HttpApplicationFactory對象維護著很多HttpApplication對象,該對象用于處理請求。當程序工廠對象被調(diào)用后,它會驗證請求的目標虛擬文件夾是否存在,如果應(yīng)用程序已運行,改工廠則從可用的對象池中取一個HttpApplication對象,然后把請求對象委托給它,如果沒有就創(chuàng)建它。如果虛擬目錄不曾被調(diào)用,則在新的AppDomain中創(chuàng)建一個HttpApplication對象,這樣,如果應(yīng)用程序文件global.asax存在,HttpApplication對象就需要對它進行編譯,該過程相當于啟動應(yīng)用程序。HttpApplication對象用于處理頁面請求,每一次處理一個(多個對象用于處理并發(fā)請求)。
HttpApplication類
HttpApplication是一個基類,代表著運行中的ASP.NET應(yīng)用程序。
也可以是HttpApplication的派生類代表著運行中ASP.NET應(yīng)用程序。
如果global.asax存在,會創(chuàng)建動態(tài)生成的應(yīng)用程序類的源代碼,
如果global.asax可用,應(yīng)用程序類會創(chuàng)建,否則會使用基類HttpApplication。
HttpApplication類或派生類的實例管理請求的整個生命周期,是有請求處理完畢后,該實例會被釋放,才會可能處理其他的請求。
HttpApplication維護著一系列Http模塊對象,這些對象可以請求的內(nèi)容進行篩選,修改。在請求過程中,可能隨時會調(diào)用已注冊的模塊。HttpApplication對象能判斷請求資源是什么類型(頁面、控件等),然后使用通過處理程序工廠鎖定可以處理請求的處理程序?qū)ο?。處理程序工廠對象是實現(xiàn)IHttpHandlerFactory接口的類實例,負責鎖定可以處理請求的對象——HTTP處理程序。一個ASP.NET頁面是一個處理程序?qū)ο螅▽崿F(xiàn)了IHttpHandler接口的類實例)。
頁面工廠
HttpApplication類會確定要處理的請求的對象模型,并委托該類型相關(guān)的處理程序工廠創(chuàng)建其新的實例。如果請求是一個頁面請求,那會怎樣?
一旦HttpApplication對象掌管了請求,就必須選擇一個合適的處理程序,對于面向頁面的請求,對用的工廠名為:PageHandlerFactory。為找到合適的處理程序,HttpApplication會讀取配置文件<HttpHandlers>區(qū)段的信息,是包含一個主要的已注冊處理程序。請求過來之后,頁面處理工廠會創(chuàng)建請求頁面的對象實例。頁面對象繼承于Page類,該類實現(xiàn)了IHttpHandler接口,頁面對象會被返回應(yīng)用程序工廠,隨后會被回傳給HttpRuntime對象,最后的步驟由ASP.NET運行庫完成。ASP.NET運行庫會調(diào)用IHttpHandler的頁面對象的ProcessRequest方法,這會使頁面執(zhí)行用戶定義的代碼,并為瀏覽器返回HTML標記。
我在網(wǎng)站找了一張整個管道的流程圖,比較貼近:

相關(guān)文章
asp.net通過Ajax UpdatePanel回傳后滾動條位置變更解決方法
用一個隱藏控件保存當前scorll值。回傳回來后根據(jù)scroll的值在重新設(shè)置scroll。2010-06-06
ASP.NET Core 奇淫技巧之偽屬性注入的實現(xiàn)
這篇文章主要介紹了ASP.NET Core 奇淫技巧之偽屬性注入的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-08-08
解決.NET?Core企業(yè)微信openapi回調(diào)地址請求不通過的問題
這篇文章介紹了解決.NET?Core企業(yè)微信openapi回調(diào)地址請求不通過的問題,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-06-06
.NET Core Web APi大文件分片上傳研究實現(xiàn)
這篇文章主要介紹了.NET Core Web APi大文件分片上傳研究實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-11-11
Asp.net中Response.Charset與Response.ContentEncoding區(qū)別示例分析
這篇文章主要介紹了Asp.net中Response.Charset與Response.ContentEncoding區(qū)別示例分析,對于深入理解Asp.net程序設(shè)計有一定的幫助,需要的朋友可以參考下2014-08-08
使用Spring.Net框架實現(xiàn)多數(shù)據(jù)庫
這篇文章介紹了Spring.Net框架實現(xiàn)多數(shù)據(jù)庫的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-03-03

