MVC3不显示动作的maproute

本文关键字:maproute 显示 MVC3 | 更新日期: 2023-09-27 17:53:45

如果我有以下MapRoute:

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

我可以有一个url:

blabla.com/Home/Index/123

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

blabla.com/Home/123还是blabla.com/Home/DEADBEEF ?

我想它涉及到类似的东西"{controller}/{id}/{action}"

Action和id是颠倒的,也许应该有一个默认的Action。但是MapRoute如何知道哪个控制器应该被这样对待?

MVC3不显示动作的maproute

您可能需要这样的内容。

  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]*" }
  );

你需要确保路由名不同于你设置的任何其他路由,并注意路由的顺序,因为其他相似的路由可以相互覆盖。在这种情况下,确保你可能希望在默认路由之前使用这个,但要注意它会覆盖它。

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

对于约束,您可以简单地将constraints参数添加到路由中,为某个属性设置正则表达式,如上所示。

编辑:这里有一些有用的链接,如果你需要更多的路由信息。

  • http://www.dotnet-tricks.com/Tutorial/mvc/HXHK010113-Routing-in-Asp.Net-MVC-with-example.html
  • http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx
  • 高级ASP路由教程和示例

你可以这样添加路由:

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

确保你把它放在默认路由之上。然而,这个路由会阻塞HomeController中的所有其他动作。因为我们对id参数没有约束,框架不可能知道你是在引用URL中的动作还是id。