1

我有一个使用 asp.net MVC 4 构建的 Web 应用程序。我想要以下 3 种类型的路由:

  1. /行动
  2. /动作/id
  3. /id/id2

在 global.asax 中,我更改了路线,如下所示:

routes.MapRoute(
           name: "Without Action",
           url: "{id}/{id2}",
           defaults: new { controller = "Home", action = "City_Category" },
           namespaces: new[] { "Namespace.Controllers" }
        );

        routes.MapRoute(
            name: "Without Controller",
            url: "{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            namespaces: new[] { "Namespace.Controllers" }
        );

但是当我尝试 {action}/{id} 时,它会转到 global.asax 中定义的第一条路线。仅当 url 为 {action} 或 {id}/{id2} 时才有效。

我怎样才能使所有 3 条路线都工作?

谢谢!

4

2 回答 2

0

如果{id}并且{id2}将始终是数字,您可以向路由添加一个约束,以便它仅在这些值是数字时才会启动:

routes.MapRoute(
           name: "Without Action",
           url: "{id}/{id2}",
           defaults: new { controller = "Home", action = "City_Category" },
           new { id = @"\d+", id2 = @"\d+" }
           namespaces: new[] { "Namespace.Controllers" }
        );
于 2013-08-02T18:26:01.470 回答
0

另一个想法是使用http://attributerouting.net/,你可以通过属性来定义路由,这是一个非常容易定义路由的方法,特别是如果你最终有很多复杂的路由。我有大约 30 个路由定义和很多评论,每个操作的 url 看起来如何。我可以删除所有带有这些属性的注释和路由定义。

于 2013-08-03T09:39:04.720 回答