ASP.NET MVC Module
成都創(chuàng)新互聯(lián)是專業(yè)的鳳泉網(wǎng)站建設(shè)公司,鳳泉接單;提供成都做網(wǎng)站、成都網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行鳳泉網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!在ASP.NET中管道模型是怎么來實(shí)現(xiàn)的?在請求處理流程一文中大概的講述了Http Module和HttpApplication之間的關(guān)系,而并沒有涉及到Http Module怎么去實(shí)現(xiàn)和注冊。Http Module的意義很大,ASP.NET MVC框架怎么捕獲請求的?或者換一種方式來說ASP.NET MVC框架的入口點(diǎn)在哪里?
我們直接進(jìn)入主題來看一下自定義的實(shí)現(xiàn),首先在Module使用之前我們要先定義個Module,定義很簡單,定義個類型并且實(shí)現(xiàn)IHttpModule接口示例代碼1-1
代碼1-1
1 public class CustomModule:IHttpModule 2 { 3 public void Dispose() 4 { 5 throw new NotImplementedException(); 6 } 7 8 public void Init(HttpApplication context) 9 { 10 context.BeginRequest += new EventHandler(context_BeginRequest); 11 context.EndRequest += new EventHandler(context_EndRequest); 12 } 13 14 void context_EndRequest(object sender, EventArgs e) 15 { 16 ((HttpApplication)sender).Context.Response.Write("<h2>請求處理結(jié)束后進(jìn)入自定義Module</h2>"); 17 } 18 19 void context_BeginRequest(object sender, EventArgs e) 20 { 21 ((HttpApplication)sender).Context.Response.Write("<h2>請求處理開始前進(jìn)入自定義Module</h2><hr>"); 22 } 23 }
這個時候我們自定義的Module就已經(jīng)定義好了,在CustomModule類型的 Init()方法中是訂閱了HttpApplication的事件,在請求處理流程文中說過,這里不作講解了。
這個時候運(yùn)行程序是不行的,ASP.NET有天大的本事也不知道你自己自定義了一個Module的阿,你得告訴它我這有個自定義的Module,運(yùn)行的時候要執(zhí)行我的這個Module。
現(xiàn)在我們來把Module注冊到系統(tǒng)中,打開項(xiàng)目中的Web.config配置文件,找到<system.web>節(jié)點(diǎn)添加<httpModules>節(jié)點(diǎn).
代碼1-2
<system.web> <httpModules> <add name="MyCustomModule" type="MvcApplication.CustomModule,MvcApplication"/> </httpModules> </system.web>
這里要說的是Name屬***“MyCustomModule”值只是Module注冊到系統(tǒng)的名稱,可通過HttpApplication實(shí)例對象.Modules["MyCustomModule"]的方式根據(jù)Name獲取到已經(jīng)注冊到系統(tǒng)中的Module
Type屬***值則為自定義的CustomModule類型所在的命名空間已經(jīng)類型名稱,逗號后面的值為CustomModule類型所在的程序集名稱。
這個時候還是不能運(yùn)行程序的,因?yàn)椴┲鞯氖纠绦蚴鞘褂肕VC框架的項(xiàng)目,所以要添加一個空的控制器和一個視圖。
右擊Controllers文件夾添加->控制器,設(shè)置名稱為HomeController,設(shè)置控制器模板為空控制器,單擊確定后,會看到控制器中有個默認(rèn)的Index()方法。
右擊Index()方法名稱,選擇添加視圖后彈出對話框點(diǎn)擊添加即可。
添加 <h3>自定義Module演示</h3><hr /> 到視圖
這樣我們再看一下項(xiàng)目的運(yùn)行結(jié)果:
圖1
這里要說的UrlRoutingModule類型就是一個系統(tǒng)定義的Module,為什么要講解它呢?因?yàn)閺乃锩婵梢钥吹较到y(tǒng)的擴(kuò)展點(diǎn),也因?yàn)樗锹酚上到y(tǒng)和MVC框架的連接點(diǎn)。
根據(jù)前面的篇幅對于路由的學(xué)習(xí),可以說是對路由有了一個基礎(chǔ)的認(rèn)識,大家都知道請求的Url會去匹配系統(tǒng)的定義的路由模式,然后獲得一個RouteData這么一個對象實(shí)例,然后根據(jù)它里面的信息來進(jìn)行對控制器的生成操作等等后續(xù)的一些行為。
我們來看圖1來理解UrlRoutingModule的作用,或許在實(shí)際項(xiàng)目開發(fā)中不會自己去擴(kuò)展這部分內(nèi)容,但是多了解一下也沒有壞處。
圖2
UrlRoutingModule類型的內(nèi)部大概實(shí)現(xiàn)如代碼1-3
代碼1-3
1 void context_PostResolveRequestCache(object sender, EventArgs e) 2 { 3 HttpApplication context = sender as HttpApplication; 4 HttpContextWrapper contextWrapper = new HttpContextWrapper(context.Context); 5 6 RouteData routeData = RouteTable.Routes.GetRouteData(contextWrapper); 7 8 RequestContext requestContext = new RequestContext(contextWrapper, routeData); 9 IHttpHandler httpHandler = routeData.RouteHandler.GetHttpHandler(requestContext); 10 httpHandler.Proce***equest(context.Context); 11 }
在上面的代碼1-3中,httpHandler變量是通過RouteData對象下的RouteHandler屬***里的GetHttpHandler()方法來根據(jù)請求上下文對象RequestContext獲取的。
這里捎帶一句,關(guān)于RequestContext類型(不是對象類型,是參數(shù)上下文類型)在MVC后續(xù)的學(xué)習(xí)中會經(jīng)常見到,這也算是一種開發(fā)中的模式吧,RequestContext對象中封裝了HttpContextBase對象和RouteData對象。
接著剛才的話題,MvcRouteHandler類型已經(jīng)實(shí)現(xiàn)了IRouteHandler類型,細(xì)心的朋友在閱讀前面的文章會發(fā)現(xiàn),在MVC中注冊路由的時候?yàn)槊總€自定義路由規(guī)則(也就是Route對象)實(shí)例化的時候是用默認(rèn)的MvcRouteHandler類型,從而會轉(zhuǎn)變到RouteData的RouteHandler屬***里,在MvcRouteHandler類型的默認(rèn)實(shí)現(xiàn)里,GetHttpHandler()方法返回的是MvcHandler,然后就像上面所說的那樣。在IHttpHandler接口中定義了一個Proce***equest()方法,這個方法就是MVC框架中請求->路由->控制器的一個過程。這部分內(nèi)容會在控制器部分說明。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)站標(biāo)題:ASP.NETMVCModule-創(chuàng)新互聯(lián)
文章URL:http://aaarwkj.com/article14/cdhcge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司、小程序開發(fā)、微信小程序、面包屑導(dǎo)航、域名注冊、動態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容