介紹ASP.NET Framework
深入Http Module
一個(gè)Http 請(qǐng)求在被ASP.NET Framework捕獲之后會(huì)依次交給Http Module以及Http Handler來(lái)處理。hm與hh之間不是完全獨(dú)立的,實(shí)際上,Http 請(qǐng)求在hm傳遞的過(guò)程中會(huì)在某個(gè)事件內(nèi)將控制權(quán)轉(zhuǎn)交給hh的,而真正的處理在Http Handler中執(zhí)行完成后,Http Handler會(huì)再次將控制權(quán)交還給Http Module
上面的代碼中的Http Module的Init()中的參數(shù)是Http Application類型,它具有許多事件,包括BeginRequest,EndRequest,AuthentiacteRequest等等。
IHttp Handler
它是ASP.NET Framework提供的一個(gè)接口,定義了如果要實(shí)現(xiàn)一個(gè)Http 請(qǐng)求的處理所需要必須實(shí)現(xiàn)的一些系統(tǒng)約定。也就是說(shuō),如果你想要自行處理某些類型的Http 請(qǐng)求信息流的話,你需要實(shí)現(xiàn)這些系統(tǒng)約定才能做到。譬如一個(gè)*.aspx文件,用來(lái)處理此類型的Http 請(qǐng)求,ASP.NET Framework將會(huì)交給一個(gè)名為System.Web.UI.PageHandlerFactory的Http Handler類來(lái)處理。
HH和HM一樣,系統(tǒng)會(huì)在最初始由ASP.NET Framework首先加載machine.config中的Http Handler,而后會(huì)加載Web應(yīng)用程序所在目錄的web.config中的用戶自定義的Http Handler類。但是系統(tǒng)與我們自定義的HH之間的關(guān)系是"覆蓋"的,也就是說(shuō)如果我們自定義了一個(gè)針對(duì)"*.aspx"的Http Handler類的話,那么系統(tǒng)會(huì)將對(duì)此Http 請(qǐng)求的處理權(quán)完全交給我們自己定義的這個(gè)Http Handler類來(lái)處理,而我們自己的Http Handler類則需要自己完全解析這個(gè)Http 請(qǐng)求,并作出處理。
IHttp Handler接口中最重要的方法ProcessRequest,這個(gè)方法就是Http Handler用來(lái)處理一個(gè)Http 請(qǐng)求,當(dāng)一個(gè)Http 請(qǐng)求經(jīng)過(guò)由Http Module容器傳遞到Http Handler容器中的時(shí)候,F(xiàn)ramework會(huì)調(diào)用Http Handler的ProcessRequest方法來(lái)做對(duì)這個(gè)Http 請(qǐng)求做真正的處理。
Framework實(shí)際上并不是直接把相關(guān)頁(yè)面的Http 請(qǐng)求定位到一個(gè)內(nèi)部默認(rèn)的IHttp Handler容器之上的,而是定位到了其內(nèi)部默認(rèn)的IHttp HandlerFactory上了。IHttp HandlerFactory的作用就是對(duì)很多系統(tǒng)已經(jīng)實(shí)現(xiàn)了的IHttp Handler容器進(jìn)行調(diào)度和管理的,這樣做的優(yōu)點(diǎn)是大大增強(qiáng)了系統(tǒng)的負(fù)荷性,提升了效率。
【編輯推薦】