請(qǐng)求處理管道

請(qǐng)求管道是一些用于處理HTTP請(qǐng)求的模塊組合,在ASP.NET中,請(qǐng)求管道有兩個(gè)核心組件:IHttpModuleIHttpHandler。所有的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文件中定義了<