如何配置ASP.NET MVC 3路由,以便它不需要url中的控制器和操作?
我这是为了显示项目“abc123”的详细信息,使用默认路由设置进行配置:
mysite.com/Home/Details/abc123
值“abc123”是一个唯一值,Home控制器用它来查找数据库中的正确项目。
但我更愿意使用这些超短网址:
mysite.com/abc123
该网站还将拥有非常少的其他控制器,例如“关于”和“联系”。我假设我必须特别配置它们,因此默认控制器不会开始查找ID为“About”或“Contact”的项目的详细信息。我该怎么做?
更新:
这是我的路线最终看起来像:
routes.MapRoute("About", "About", New With {.controller = "About", .action = "Index"})
routes.MapRoute("ID", "{id}", New With {.controller = "Home", .action = "Details"})
routes.MapRoute("Default", "", New With {.controller = "Home", .action = "Index"})
:)
答案 0 :(得分:6)
尝试这样的事情:
routes.MapRoute("Site"
, "Site/{controller}/{action}"
, new { controller = "Home", action = "Index"});
routes.MapRoute("Id"
, "{id}"
, new { controller = "Home", action = "Details"});
第一个路由应确保您可以将/ Site / About和/ Site / Contact分别映射到AboutController和ContactController。首先映射它是很重要的。
第二条路线将确保/ abc123被映射到ID为“abc123”的详细信息操作
答案 1 :(得分:1)
你可以使用它。
routes.MapRoute("abc123"
, "Home/Details/{name}"
, new { controller = "Home", action = "Detail", name = ""});
您的行动如下:
public ActionResult Detail(string name)
{
//...
}
答案 2 :(得分:0)
您也可以这样做:
routes.MapRoute("abc123", "abc123", new { controller = "Home", action = "Details"});
我正在使用MVC3,它对我有用。