MapRoute从url中删除单个操作的操作

时间:2013-06-01 21:31:55

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

所以我读了很多答案,但我似乎无法理解我做错了什么。这是我正在使用的路线

     routes.MapRoute("project",
           "project/{id}/{slug}",
           new { controller = "project", action = "index", id = UrlParameter.Optional, slug = "" }
        );
      routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

这样可行,但它会使书籍控制器中的所有其他操作重定向到索引操作。我不希望这样,我只想让我的网址看起来像http://www.example.com/project/1/awesome-book,这有效,但我正在使用的所有其他操作,从该页面通过Ajax,指向索引操作而不是他们的正确的行动。

帮助?

1 个答案:

答案 0 :(得分:3)

您可以为id参数添加整数约束。

 routes.MapRoute("project",
       "project/{id}/{slug}",
       new { controller = "project", action = "index", id = UrlParameter.Optional, slug = "" },
       new { id = @"\d+"});

此路由对id参数有约束。它是一个简单的正则表达式,用于检查id参数是否为整数。由于此路线高于默认路线,因此将首先检查该路线。 http://www.example.com/project/1/awesome-book将映射到Index操作。但是当您尝试进行其他操作时,您的第二段将包含操作名称。由于操作名称不是整数,因此默认路由将解析请求。