c# MVC路由——多路由
本文关键字:路由 多路 MVC | 更新日期: 2023-09-27 18:18:36
我有一个默认的c# mvc路由:
routes.MapRoute(
"Default",
"{controller}/{action}/{id}"
new { controller = "Home", action = "Index", id = "Welcome" }
);
现在我会得到这样的url:
mysite.com/Home/Index/Page1
mysite.com/Home/Index/Page2
mysite.com/Home/Index/Page3
mysite.com/Account/Login
mysite.com/Account/Etc
但是我想让第一个集的url更短,比如:
mysite.com/Page1
mysite.com/Page2
mysite.com/Page3
mysite.com/Account/Login
mysite.com/Account/Etc
我期望代码非常简单,如:
routes.MapRoute(
"Shorturl",
"{id}",
new { controller = "Home", action = "Index", id = "Welcome" }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}"
new { controller = "Home", action = "Index", id = "Welcome" }
);
但这不起作用。它只会走第一条路,而忘记第二条路。当只有一个参数(例如?)时,如何使程序采用第一条路径mysite.com/Page1),当你有多条路线时,选择第二条路线(如mysite.com/Account/Login) ?
编辑:我可以:
routes.MapRoute("Short", "short/{id}", new { controller = "Home", action = "Indx", id = "Page1" } );
但是这样我就会在url中有一个丑陋的"短/"。我可以修改:
routes.MapRoute("Page1", "Page1", new { controller = "Home", action = "Index", id = "Page1" } );
但是我需要手动添加每个新页面…
您可能想尝试这样做。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Short", // Route name
"{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
确保你把这个添加到路由的默认值之前(如果你想的话,甚至可以删除默认值)
但是它们的添加顺序很重要。
有一个信息丢失了,那就是控制器中的Action。
public ActionResult Index(string id)
{
ViewBag.Message = "Welcome to ASP.NET MVC!"+id;
return View();
}
希望对你有帮助。
问候。