MVC筆記--特性路由

  • 物性路由:將路由和控制器放在一起,這樣更簡單方便,還可以處理複雜的路由場景

  • 傳統路由:集中、強制、基於代碼風格來定義的。

每個MVC應用程序都需要路由來定義自己的處理請求方式,路由是MVC是應用程序的入口點。我們先了解一下路由涉及的主要概念:路由定義是從URL模板開始的,因爲它指定了與路由相匹配的模式。路由定義可以做爲控制器類或操作方法的特性。路由可以指定的它的URL及其默認值,此外,它還可以約束URL的各個部分,提供關於路由如何及何時與傳入的URL相匹配的嚴格控制。

創建一個MVC程序後,我們可以在Application_Start/RouteConfig.cs文件中。因爲我們這次主要講特性路由,所以可以先刪除裏面默認的所有內容,通過MapMvcAttributeRout()方法來定義。

在HomeController中隨便找一個視圖前面加上[route("")],我這裏用的是about,定義的路由名爲”aboutTest“

 

[Route("aboutTest")]

public ActionResult About()

{

ViewBag.Message = "Your application description page.";

 

return View();

}

URL用這個訪問:http://localhost:8957/ceshi

*這些URL就不要寫home/ceshi了,因爲我們已經定義路由,直接輸入就可以訪問

 37758-20170630233838961-1259857750.png

控制器路由:前面看了如何把路由特性直接添加到操作方法上,但很多時侯控制器類中的方法遵循的模式具有相似的路由特情,這裏我們可以定一下action的特殊路由參數,以後該控制器下的路由就不用重複寫相似的代碼了

/// <summary>

/// 定義路由映射

/// </summary>

[Route("{home}/{action}")]

public class HomeController : Controller

{

public ActionResult About()

{

ViewBag.Message = "Your application description page.";

 

return View();

}

}

URL:http://localhost:8957/home/About

當然用這種方式後,控制器上也可以添加特性路由,也是可以訪問的

我們也可以使用前綴“RoutePrefix”

/// <summary>

/// 定義路由映射--使用前綴

/// </summary>

[RoutePrefix("home")]

[Route("{action}")]

這樣程序會幫我們自動加上“home”控制器的前綴,兩者皆支持覆蓋行爲,即爲一個控制器指定多個路由規則:

[Route("")]

[Route("default")]

public ActionResult Index()

{

return View();

}

http://localhost:8957/home/default

http://localhost:8957/home/

這兩條URL都可以訪問到同一個控制器

* [Route("{home}/{action}")]:用這種方式,控制器前臺有指定路由,URL訪問不用輸入控制器的前綴例:

http://localhost:8957/default

http://localhost:8957/

這兩條URL訪問的都是Index控制器。如果沒有爲控制器添加特性路由,在訪問時就要添加控制器的名字(前綴)

例:http://localhost:8957/home/About 這條URL訪問的是“About”控制器

public ActionResult About()

{

ViewBag.Message = "Your application description page.";

 

return View();

}

路由約束:當我們使用帶有參數的路由時,會發現如果我們想讓相同的路由,不同的參數分別訪問不同的控制器時,我們就要用到路由約束

[Route("ceshi/{id:double}")]

public ActionResult Test1(string id)

{

return View();

}

URL: http://localhost:8957/ceshi/3.14/

37758-20170630233946602-747103713.png

下面的圖片是內聯表,我偷個懶,切了一張圖片;

 37758-20170630234006805-396110658.png

(未完,待續)

                                                                                           


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章