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了,由於咱們已經定義路由,直接輸入就能夠訪問
 
控制器路由:前面看了如何把路由特性直接添加到操做方法上,但不少時侯控制器類中的方法遵循的模式具備類似的路由特情,這裏咱們能夠定一下action的特殊路由參數,之後該控制器下的路由就不用重複寫類似的代碼了
/// <summary>
/// 定義路由映射
/// </summary>
[Route("{home}/{action}")]
public class HomeController : Controller
{
public ActionResult About()
{
ViewBag.Message = "Your application description page.";
 
return View();
}
}
固然用這種方式後,控制器上也能夠添加特性路由,也是能夠訪問的
咱們也可使用前綴「RoutePrefix」
/// <summary>
/// 定義路由映射--使用前綴
/// </summary>
[RoutePrefix("home")]
[Route("{action}")]
這樣程序會幫咱們自動加上「home」控制器的前綴,二者皆支持覆蓋行爲,即爲一個控制器指定多個路由規則:
[Route("")]
[Route("default")]
public ActionResult Index()
{
return View();
}
這兩條URL均可以訪問到同一個控制器
* [Route("{home}/{action}")]:用這種方式,控制器前臺有指定路由,URL訪問不用輸入控制器的前綴例:
這兩條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();
}
下面的圖片是內聯表,我偷個懶,切了一張圖片;
 
(未完,待續)
相關文章
相關標籤/搜索