久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

ASP.NETMVC路由(一)

 ASP.NET MVC路由(一)

前言

從這一章開始,我們即將進(jìn)入MVC的世界,在學(xué)習(xí)MVC的過程***諭纖閹髁艘幌攏柿匣故鍬嗟?;策€雜諼藝庋某躚д呃純椿故怯械隳訊齲約壕拖肟吹接幸黃***的資料可以幫助我初步的了解一下這部分知識(shí),然后再去學(xué)習(xí)大神們寫的資料。并不是說看完文章就會(huì)可以開發(fā)、可以怎么怎么樣,沒有!這些都沒有,只是讓你在腦海中把這部分內(nèi)容記住它們的模型圖以及一個(gè)大概的在MVC框架中的位置或者是整個(gè)系統(tǒng)中的位置,說了這么多的目的就是讓大家更好的了解基礎(chǔ)知識(shí),有了它以后的進(jìn)階會(huì)更輕松。

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比洪山網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式洪山網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋洪山地區(qū)。費(fèi)用合理售后完善,10年實(shí)體公司更值得信賴。

什么是路由?

可以把路由提供的功能看成是一個(gè)組件,既然是組件在哪都可能會(huì)用到的,而它所提供的功能就是URL的映射,和URL輸出。在傳統(tǒng)的Web Form開發(fā)中可能路由映射到的處理程序是一個(gè)aspx文件,而在MVC中大多數(shù)情況下是映射的控制器和控制器行為,傳統(tǒng)的模式我們先不管,我們是來學(xué)習(xí)MVC的。

 

路由的對(duì)象結(jié)構(gòu)

先打開VS環(huán)境,新建一個(gè)MVC的項(xiàng)目,在項(xiàng)目中會(huì)看到一個(gè)名字叫Global.asax的文件,打開它,會(huì)看到是一個(gè)MvcApplication類型并且繼承自HttpApplication,在這個(gè)MvcApplication類型中有個(gè)RegisterRoutes公共的靜態(tài)函數(shù),如圖1-1

圖1-1

ASP.NET MVC路由(一)

這里要關(guān)注的是routes.MapRoute()這個(gè)方法,這個(gè)方法不是RouteCollection類型本身的方法,而是一個(gè)擴(kuò)展方法,看一下擴(kuò)展類型的定義:

 1     //}
 2     // 摘要:
 3     //     擴(kuò)展 System.Web.Routing.RouteCollection 對(duì)象以進(jìn)行 MVC 路由。
 4     public static class RouteCollectionExtensions
 5     {
 6         
 7         public static VirtualPathData GetVirtualPathForArea(this RouteCollection routes, RequestContext requestContext, RouteValueDictionary values);
 8         public static VirtualPathData GetVirtualPathForArea(this RouteCollection routes, RequestContext requestContext, string name, RouteValueDictionary values);
 9         public static void IgnoreRoute(this RouteCollection routes, string url);
10         public static void IgnoreRoute(this RouteCollection routes, string url, object constraints);
11         public static Route MapRoute(this RouteCollection routes, string name, string url);       
12         public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults);       
13         public static Route MapRoute(this RouteCollection routes, string name, string url, string[] namespaces);       
14         public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, object constraints);       
15         public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, string[] namespaces);       
16         public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, object constraints, string[] namespaces);
17     }

可以在上述的類型中看到許多MapRoute()方法的重載,并且方法的參數(shù)又有這么多,這個(gè)系列方法的意義在于向路由系統(tǒng)中添加你自定義的一個(gè)URL映射規(guī)則。怎么添加的呢?這是根據(jù)系統(tǒng)上下文中的RouteTable對(duì)象中的RouteCollection類型的屬***Routes,而在MapRoute()方法中的實(shí)現(xiàn)說白了就是根據(jù)參數(shù)生成Route對(duì)象,并且添加Route對(duì)象到服務(wù)器中,而URL規(guī)則則是在Route對(duì)象的內(nèi)部構(gòu)造了。

看一下示意圖2:

圖1-2

ASP.NET MVC路由(一)

從上圖中可以看到,一個(gè)個(gè)的Route對(duì)象被注冊(cè)到服務(wù)器端中,每個(gè)Route對(duì)象自身攜帶著一則URL規(guī)則,暫時(shí)我們只需要理解這么多,對(duì)于RouteData對(duì)象會(huì)在后續(xù)講解。

既然上面說到了Route對(duì)象我們就先來看一下路由Route對(duì)象的基礎(chǔ)構(gòu)造,如圖1-3

圖1-3

ASP.NET MVC路由(一)

(ps:這個(gè)圖不是結(jié)構(gòu)圖不是什么正規(guī)的畫法,相當(dāng)于一個(gè)思維導(dǎo)圖,讓人看了能明白就行)

先從圖1-3的MapRoute()方法開始說起吧,在這個(gè)方法的內(nèi)部會(huì)生成一個(gè)Route對(duì)象,并且添加到當(dāng)前的RouteCollection類型的對(duì)象中。

圖1-4

ASP.NET MVC路由(一)

在圖1-4中MapRoute方法中的”Default”參數(shù)表示著Route對(duì)象的內(nèi)部是有著Name這個(gè)屬***值的,只是沒有公開使用而已,可以通過這樣的方式來對(duì)路由進(jìn)行名稱賦值。

”{controller}/{action}/{id}”參數(shù)對(duì)應(yīng)的Route對(duì)象的Url屬***,只不過在MapRoute內(nèi)部做賦值操作的時(shí)候,Route對(duì)象Url屬***的Set訪問器也在做著額外的操作,對(duì)Url進(jìn)行解析生成成Url的規(guī)則,這個(gè)內(nèi)容在后面的篇幅會(huì)有講到。

參數(shù)new {controller="Home",action="Index",id=UrlParameter.Optional}則會(huì)編譯成一個(gè)動(dòng)態(tài)類型,此類型中包含參數(shù)中定義的controller、action和id三個(gè)屬***,在MapRoute()方法中會(huì)先判斷類型是否是RouteValueDictionary類型,如果是的話會(huì)直接賦值到Defaults屬***,否則會(huì)使用其它的方法把根據(jù)這個(gè)動(dòng)態(tài)類型生成一個(gè)RouteValueDictionary類型實(shí)例。

這里捎帶一句RouteValueDictionary類型出現(xiàn)頻率較高,主要是因?yàn)镽oute對(duì)象的的幾個(gè)屬***都是這個(gè)類型,把它作為鍵值隊(duì)來想就行了。

圖1-5

ASP.NET MVC路由(一)

這種思維圖沒有重復(fù),只是希望作為初學(xué)者閱讀完本篇過后能留下的整體印象就是最后的這幅圖。

Route對(duì)象的屬***和函數(shù)一篇是說不完的,文章的目的只是一個(gè)基礎(chǔ)***的掃盲,鋪設(shè)基礎(chǔ)而已,會(huì)在后續(xù)的篇幅中說到Route對(duì)象的Url規(guī)則定義和RouteData的由來,以及RouteCollection對(duì)象的一些基礎(chǔ)概念。

 

 

新聞標(biāo)題:ASP.NETMVC路由(一)
鏈接分享:http://sd-ha.com/article40/jgedho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、微信小程序、網(wǎng)站建設(shè)、域名注冊(cè)、定制開發(fā)、網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)