0

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

     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 }
        );

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

帮助?

4

1 回答 1

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将映射到索引操作。但是当您尝试执行其他操作时,您的第二个片段将包含一个操作名称。由于动作名称不是整数,因此请求将由默认路由解析。

于 2013-06-01T21:36:25.720 回答