MVC3 maproute没有显示动作?

时间:2013-01-16 10:37:04

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

如果我有以下MapRoute:

routes.MapRoute(
    "Default",                                              // Route name
    "{controller}/{action}/{id}",                           // URL with parameters
        new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
);

我可以有一个网址:

blabla.com/Home/Index/123

但是我需要创建什么样的MapRoute才能做到这一点:

blabla.com/Home/123blabla.com/Home/DEADBEEF

我认为它涉及到某些方面 "{controller}/{id}/{action}"

动作和ID相反,也许应该有默认动作。但MapRoute将如何知道应该像这样对待哪个控制器呢?

2 个答案:

答案 0 :(得分:3)

你可能需要这些方面的东西。

  routes.MapRoute(
      name: "DefaultRoute",
      url: "Home/{action}",
      defaults: new { controller = "Home", action = "Index" },
      constraints: new { action = "[A-Za-z]*" }
  );

或没有行动

  routes.MapRoute(
      name: "DefaultRoute",
      url: "Home/{id}",
      defaults: new { controller = "Home", action = "Index", id = "" },
      constraints: new { id = "[A-Za-z]*" }
  );

您需要确保路线名称与您设置的任何其他路线不同,并注意路线的顺序,因为其他相似的路线可以互相覆盖。在这种情况下,请确保您可能在默认路由之前想要这个,但请注意它将覆盖它。

对于没有控制器甚至动作,您可以设置默认值,并且在路线中不需要它们。

对于约束,您可以简单地将约束参数添加到路径以设置特定属性的正则表达式,如上所示。

编辑: 以下是一些有用的链接,可以在需要时提供有关路由的更多信息。

答案 1 :(得分:2)

您可以添加如下路线:

routes.MapRoute(
    "CustomRoute",
    "Home/{id}",
    new { controller = "Home", action = "Index", id = "" });

确保将其放在默认路线上方。但是,此路由将阻止HomeController中的所有其他操作。由于我们没有对id参数的约束,因此框架无法知道您是在URL中引用操作还是id。由于此路线首先出现,因此会将其映射到id参数。