• <output id="aynwq"><form id="aynwq"><code id="aynwq"></code></form></output>

    <mark id="aynwq"><option id="aynwq"></option></mark>
  • <mark id="aynwq"><option id="aynwq"></option></mark><label id="aynwq"><dl id="aynwq"></dl></label>
  • 學(xué)習(xí)啦>學(xué)習(xí)電腦>網(wǎng)絡(luò)知識(shí)>網(wǎng)絡(luò)技術(shù)>

    入門(mén)學(xué)習(xí)ASP.NET MVC路由器

    時(shí)間: 若木635 分享

      本文是小編帶來(lái)入門(mén)學(xué)習(xí)ASP.NET MVC路由器,歡迎大家閱讀。

      作為一個(gè)從ASP.NET轉(zhuǎn)入到ASP.NET MVC的開(kāi)發(fā)人員而言,可能在開(kāi)發(fā)ASP.NET網(wǎng)站的時(shí)候就已經(jīng)開(kāi)始在使用路由了。只不過(guò)在ASP.NET MVC中路由是關(guān)鍵部分,而在ASP.NET中需要自行加進(jìn)去。下面我們將學(xué)習(xí)ASP.NET MVC中的路由系統(tǒng)。

      一、準(zhǔn)備工作

      1.新建一個(gè)ASP.NET MVC4項(xiàng)目

      2.模板選擇空

      3.在Controllers中添加一個(gè)Home控制器

      4.打開(kāi)App_Start中的RouteConfig文件

      5.將RouteConfig中默認(rèn)路由刪掉

      二、入門(mén)

      1.基本路由

      RouteConfig.cs:

      然后運(yùn)行網(wǎng)站,輸入http://localhost:xxxx/Home/Index回車,然后你就能看到對(duì)應(yīng)的頁(yè)面了。當(dāng)然你會(huì)認(rèn)為這個(gè)非常簡(jiǎn)單,但是我們也需要理解這些是如何做到的。

      下面我們可以看到URL路徑和路由配置中的路徑對(duì)比:

      由上面的圖,我們可以得出下面的一組路由數(shù)據(jù):

      然后控制器工廠根據(jù)這些參數(shù)將會(huì)調(diào)用HomeController中的Index方法,這其中是如何工作的,我們會(huì)在后面講解控制器工廠中講到。掌握了上面的基礎(chǔ)之后我們就可以繼續(xù)往下學(xué)習(xí)了。

      2.默認(rèn)路由

      上面的示例中我們會(huì)發(fā)現(xiàn)默認(rèn)打開(kāi)網(wǎng)站是會(huì)報(bào)異常的,但是我們通過(guò)訪問(wèn)網(wǎng)站都值需要輸入域名然后就可以看到首頁(yè)了,那么我們?nèi)绾卧贏SP.NET MVC中做到這種效果呢,下面我們就來(lái)介紹。

      RouteConfig.cs

      提示:default中的默認(rèn)值變量的名稱必須和url中的名稱相同,但是大小寫(xiě)不限制。

      然后我們重新打開(kāi)就可以看到正確的結(jié)果了。如果你不是通過(guò)F5來(lái)查看的話,你需要重新編譯一下項(xiàng)目,僅僅刷新瀏覽器可沒(méi)有用。

      3.靜態(tài)URL片段

      或許你們已經(jīng)有人嘗試過(guò)輸入一些字符在花括號(hào)外面,這個(gè)其實(shí)是允許的。通過(guò)這種方式可以制造出更漂亮的路徑,比如我們將路由修改為如下所示:

      通過(guò)上面的URL我們可以看出最后我們輸入的路徑應(yīng)該是這樣的:http://localhost:2392/XHome-Index(:-)是不是非常個(gè)性化),如果你是一個(gè)愛(ài)研究的人你會(huì)發(fā)現(xiàn)當(dāng)你把URL的X去掉之后,無(wú)法顯示默認(rèn)的首頁(yè)了,但是“/”卻可以,當(dāng)然這是ASP.NET MVC的核心這么干的,后面我們完全可以改寫(xiě)。

      4.自定義片段變量

      如果你是一個(gè)喜歡依葫蘆畫(huà)瓢的人,你一定會(huì)在URL中多添加一個(gè)花括號(hào),當(dāng)然你這么做是好的,但是你能夠理解這些花括號(hào)捕捉到的值到哪里去了嗎?如果你精通ASP.NET,在控制器中打上RouteData你就可以獲取到這些值了,但是這不是我們想要的結(jié)果,下面我們來(lái)更深入的學(xué)習(xí)。

      首先修改RouteConfig.cs的內(nèi)容:

      然后我們就必須輸入下面這一串路徑才能看到頁(yè)面:http://localhost:2392/Home/Index/1你們可以發(fā)現(xiàn)最后多了1,而這個(gè)1就被{id}捕獲到了,并同時(shí)存放在了RouteData中了。這里我們可以通過(guò)其他的方式獲取url中所有捕獲到的值。

      打開(kāi)HomeController.cs,修改Index方法如下:

      接著我們?cè)谛薷腣iews/Home/Index.cshtml中的內(nèi)容,將我們捕捉到的變量顯示出來(lái):

      然后我們重新刷新瀏覽器,就可以看到下面的結(jié)果:

      你會(huì)發(fā)現(xiàn)Index方法的參數(shù)名是需要和路由中花括號(hào)中的名稱相同,否則就無(wú)法捕捉(如果你學(xué)了不少ASP.NET MVC的話,其實(shí)是可以自定義的)。

      我們可以發(fā)現(xiàn)無(wú)法直接打開(kāi)首頁(yè)了,這是因?yàn)閧id}變成了必填參數(shù)。下面我們就通過(guò)兩種方式來(lái)解決。

      (1)設(shè)置默認(rèn)值:

      選擇上面其中一種方式之后,我們又可以直接打開(kāi)首頁(yè)了。

      提示:通過(guò)將{id}改成{*id}之后我們就可以獲取http://localhost:2392/Home/Index/后面輸入的所有值了。

      5.二義性

      如果我們?cè)贛odels中也新建一個(gè)Home控制器,那么你會(huì)發(fā)現(xiàn)重新刷新之后報(bào)錯(cuò)了。而這個(gè)是因?yàn)闊o(wú)法確定到底選擇哪個(gè)控制器來(lái)響應(yīng)該請(qǐng)求的緣故,當(dāng)然你認(rèn)為只要我們不新建重名的控制器就可以了,這樣你只能控制你的項(xiàng)目中不出現(xiàn),但是你卻無(wú)法控制你加載的類庫(kù)中不會(huì)出現(xiàn),但是ASP.NET MVC已經(jīng)提供了解決方案給我們,如下改正RouteConfig.cs:

      我們可以看到namespaces參數(shù),通過(guò)將命名空間的名稱傳進(jìn)去就可以起到排除二義性的問(wèn)題了。

      6.約束路由

      上面我們有一個(gè){id}用來(lái)捕獲參數(shù)的,但是你也發(fā)現(xiàn)了它可以捕捉任何字符串等等,但是我們有時(shí)需要限制它,比如讓它只能輸入數(shù)字,那么我們就可以使用正則表達(dá)式去約束它。

      如下修改RouteConfig.cs:

      我們可以清楚的看到我們通過(guò)constraints參數(shù)將id參數(shù)約束為只能輸入數(shù)字,當(dāng)然你也可以通過(guò)一樣的方式去約束其他的參數(shù)。通過(guò) httpMethod = new HttpMethodConstraint("GET","POST")可以約束該路由只能通過(guò)那種方式訪問(wèn)。

      如果你的約束是上面無(wú)法做到的,那么下面的自定義約束一定會(huì)符合你的要求。新建一個(gè)自定義的約束只需要?jiǎng)?chuàng)建一個(gè)實(shí)現(xiàn)IRouteConstraint接口的類即可,比如我們限制只能是谷歌瀏覽器才能訪問(wèn),新建一個(gè)Filters文件,并新建一個(gè)MyRouteConstraint類,寫(xiě)入如下的代碼:

      接著我們換到不同的瀏覽器去測(cè)試,就會(huì)發(fā)現(xiàn)區(qū)別了(如果你通過(guò)瀏覽器的開(kāi)發(fā)者工具或者其他工具修改UserAgent的話也可以越過(guò)這個(gè)約束,如Filddler2工具)

    122777 主站蜘蛛池模板: 成人欧美一区二区三区小说 | 99在线精品视频| 日本免费一区二区三区最新vr | 亚洲精品一二区| 天堂а√在线中文在线| 中日韩精品视频在线观看| 久久久久久久综合狠狠综合| 久久五月天婷婷| 国产麻豆天美果冻无码视频| 三上悠亚ssni409在线看| av毛片免费看| 91秦先生在线| gta5圣堂酒店第三辆车在哪里| 中文字幕一级片| 老师你的兔子好软水好多的车视频 | 一二三四在线播放免费视频中国 | 日本免费精品一区二区三区| 亚洲人成在线免费观看| 特级无码毛片免费视频尤物| 午夜视频久久久久一区| 趴在墙上揉捏翘臀求饶h| 国产欧美日本亚洲精品一4区| 69女porenkino| 夜夜影院未满十八勿进| 一级做a爰毛片| 成年大片免费视频| 久久久久亚洲av无码专区蜜芽| 特级做a爰片毛片免费看一区| 又黄又爽又色的黄裸乳视频| 越南大胆女人体337p欣赏| 国产毛片女人18水多| 人妻无码一区二区三区| 亚洲av综合色区无码专区桃色| 九九综合VA免费看| 西西人体444rt高清大胆| 国产探花视频在线观看| 影音先锋男人看片资源| 国产美女a做受大片观看| 99热在线免费观看| 天堂在线观看视频| chinese国产高清av内谢|