在网址中没有控制器和操作的路由

时间:2011-03-10 13:57:07

标签: c# .net asp.net-mvc-3 asp.net-mvc-routing

如何配置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"})

:)

3 个答案:

答案 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,它对我有用。