請(qǐng)求處理管道
請(qǐng)求管道是一些用于處理HTTP請(qǐng)求的模塊組合,在ASP.NET中,請(qǐng)求管道有兩個(gè)核心組件:IHttpModule
和IHttpHandler
。所有的HTTP請(qǐng)求都會(huì)進(jìn)入IHttpHandler
,有IHttpHandler
進(jìn)行最終的處理,而IHttpModule
通過(guò)訂閱HttpApplication
對(duì)象中的事件,可以在IHttpHandler
對(duì)HTTP請(qǐng)求進(jìn)行處理之前對(duì)請(qǐng)求進(jìn)行預(yù)處理或IHttpHandler
對(duì)HTTP請(qǐng)求處理之后進(jìn)行再次處理。
在IIS7之前,如IIS6或IIS5,請(qǐng)求處理管道分為兩個(gè):IIS請(qǐng)求處理管道和ASP.NET管道,若客戶端請(qǐng)求靜態(tài)資源則只有IIS管道進(jìn)行處理,而ASP.NET管道不會(huì)處理該請(qǐng)求。從IIS7開(kāi)始兩個(gè)管道合二為一,稱為集成管道。
上圖中主要描述ASP.NET運(yùn)行時(shí)對(duì)HTTP請(qǐng)求的處理且不涉及太多細(xì)節(jié)。
HttpApplication與HttpModule
HTTP請(qǐng)求由ASP.NET運(yùn)行時(shí)接管之后,HttpRuntime
會(huì)利用HttpApplicationFactory
創(chuàng)建或從HttpApplication
對(duì)象池(.NET中類似的機(jī)制有線程池和字符串拘留池)中取出一個(gè)HttpApplication
對(duì)象,同時(shí)ASP.NET會(huì)根據(jù)配置文件來(lái)初始化注冊(cè)的HttpModule
,HttpModule
在初始化時(shí)會(huì)訂閱HttpApplication中的事件來(lái)實(shí)現(xiàn)對(duì)HTTP請(qǐng)求的處理。
在ASP.NET MVC5中,Global.asax
文件中定義了<