自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

入門學(xué)習(xí):ASP.NET MVC之路由篇

網(wǎng)絡(luò) 路由交換
本文作者作為從ASP.NET轉(zhuǎn)入到ASP.NET MVC的開發(fā)人員的角度,引導(dǎo)我們學(xué)習(xí)ASP.NET MVC中的路由系統(tǒng)。

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

一、準(zhǔn)備工作

1.新建一個ASP.NET MVC4項目

2.模板選擇空

3.在Controllers中添加一個Home控制器

4.打開App_Start中的RouteConfig文件

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

二、入門

1.基本路由

RouteConfig.cs:

 

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

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

 

 

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

 

 

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

2.默認(rèn)路由

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

RouteConfig.cs

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

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

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

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

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

4.自定義片段變量

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

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

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

打開HomeController.cs,修改Index方法如下:

接著我們在修改Views/Home/Index.cshtml中的內(nèi)容,將我們捕捉到的變量顯示出來:

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

 

 

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

我們可以發(fā)現(xiàn)無法直接打開首頁了,這是因為{id}變成了必填參數(shù)。下面我們就通過兩種方式來解決。

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

選擇上面其中一種方式之后,我們又可以直接打開首頁了。

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

5.二義性

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

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

6.約束路由

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

如下修改RouteConfig.cs:

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

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

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

責(zé)任編輯:林琳 來源: 博客園
相關(guān)推薦

2009-07-22 15:02:02

ASP.NET MVC

2009-07-24 13:20:44

MVC框架ASP.NET

2009-07-31 12:43:59

ASP.NET MVC

2014-08-21 09:31:06

路由

2009-07-22 14:28:43

學(xué)習(xí)ASP.NET MASP.NET MVC

2009-07-27 12:22:03

ASP.NET和ASPASP.NET入門教程

2009-07-23 15:44:39

ASP.NET MVC

2009-07-22 10:09:59

ASP.NET MVC

2009-07-23 14:31:20

ASP.NET MVC

2009-07-22 13:24:24

ASP.NET MVC

2009-07-20 10:53:59

ASP.NET MVC

2009-07-28 17:17:19

ASP.NET概述

2010-03-12 09:38:58

2010-06-23 15:44:03

ASP.NET MVC

2009-07-27 18:07:30

ASP.NET程序員

2009-07-24 11:33:12

MVC單元測試ASP.NET

2009-07-22 10:34:37

ActionInvokASP.NET MVC

2009-07-22 13:08:55

拯救UpdatePanASP.NET MVC

2010-03-19 09:17:16

ASP.NET MVC

2009-07-22 15:27:39

ASP.NET MVC自定義路由
點贊
收藏

51CTO技術(shù)棧公眾號