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