1. 指定Controller、Action
Routes.MapRoute("","{controller}/{action}");
匹配:http://www.xxx.com/home/Index.
2.帶預設參數指定
Routes.MapRoute("","{controller}/{action}",new {controller="Home",action="Index"});
匹配:http://www.xxx.com/home/Index.
http://www.xxx.com/home/
http://www.xxx.com/
3.靜態參數和變數混用
Routes.MapRoute("","X{controller}/{action}");
匹配:http://www.xxx.com/Xhome/Index;
Routes.MapRoute("","X/{controller}/{action}");
匹配:http://www.xxx.com/X/home/Index.
4.不帶controller
Routes.MapRoute("","X/{action}",new{controller="Home"});
匹配:http://www.xxx.com/X/Index.
5.自訂路由變數
Routes.MapRoute("","{controller}/{action}/{id}",new {controller="Home",action="Index",id="defaultId"});
自訂變數不能使用controller、action和area作為變數名。
6.訪問路由變數的值
RouteData.Value[""]的值。
例如:ViewBag.V=RouteData.Value["action"];
另外一種方法就是把自訂變數當作Action的值傳入到Action方法裡面,如:
public ViewResult CustomVariable(string id) {
ViewBag.CustomVariable = index;
return View();
}
7.定義選擇性URL變數
routes.MapRoute("MyRoute", "{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional });
}
這樣,URL裡包含和不包含id變數的值都能通過編譯。
8.通過C#選擇性參數指定變數的預設值
public ViewResult CustomVariable(string id = "DefaultId") {
ViewBag.CustomVariable = id;
return View();
}
9.定義可變長度的路由變數
public static void RegisterRoutes(RouteCollection routes) {
routes.MapRoute("MyRoute", "{controller}/{action}/{id}/{*catchall}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional });
}
匹配:mydomain.com/Customer/List/All/Delete //catcall=Delete
mydomain.com/Customer/List/All/Delete/Perm //catcall=Delete/Perm
10. 包含多個相同名稱的Controller
routes.MapRoute("MyRoute", "{controller}/{action}/{id}/{*catchall}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new[] { "URLsAndRoutes.Controllers"});
通過指定controller的命名空間來區別兩個名稱相同的controller
可以通過指定告訴MVC Framework只在某一命名空間中尋找對應的Controller
Route myRoute = routes.MapRoute("AddContollerRoute", "Home/{action}/{id}/{*catchall}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new[] { "AdditionalControllers" });
myRoute.DataTokens["UseNamespaceFallback"] = false;
}
11.通過Regex限制路由
例如:
routes.MapRoute("MyRoute", "{controller}/{action}/{id}/{*catchall}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new { controller = "^H.*"},
new[] { "URLsAndRoutes.Controllers"});
就限制了controller必須是以H字母開頭的
限制路由為特定的值:
routes.MapRoute("MyRoute", "{controller}/{action}/{id}/{*catchall}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new { controller = "^H.*", action = "^Index$|^About$"},
new[] { "URLsAndRoutes.Controllers"});
限制了路由為Index或About方法
限制路由的Http方法:
routes.MapRoute("MyRoute", "{controller}/{action}/{id}/{*catchall}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new { controller = "^H.*", action = "Index|About",
httpMethod = new HttpMethodConstraint("GET") },
new[] { "URLsAndRoutes.Controllers" });
12.從路由資料中構造URL
@Html.RouteLink("Routed Link",new{controller="Home",action="About",id="MyID"}); //效果同Action
@Url.RouteUrl(new{controller="Home",action="About",id="MyID"});//只產生URL,不帶Action
13.在Action方法中產生URL
public ViewResult MyActionMethod() {
string myActionUrl = Url.Action("Index", new { id = "MyID" });
string myRouteUrl = Url.RouteUrl(new { controller = "Home", action = "Index" });
... do something with URLs...
}
14.重新導向ActionResult
方法一:
public ActionResult MyActionMethod() {
return RedirectToAction("Index");
}
方法二:
public ActionResult MyOtherActionMethod() {
return RedirectToRoute(new { controller = "Home", action = "Index", id = "MyID" });
}
15.從特定路由中擷取串連
routes.MapRoute("MyRoute", "{controller}/{action}");
routes.MapRoute("MyOtherRoute", "App/{action}", new { controller = "Home" });