路线.MapRoute()导致404未找到

本文关键字:导致 MapRoute 路线 | 更新日期: 2023-09-27 18:01:14

为什么在ASP.NET MVC中点击url /users/3调用具有页码的路由时,此路由会导致404未找到:

routes.MapRoute(
    "Users", // Route name
    "users/{page}/{sortColumn}/{sortDirection}", // URL with parameters
    new { controller = "User", action = "Index", page = UrlParameter.Optional, sortColumn = UrlParameter.Optional, sortDirection = UrlParameter.Optional }, // Parameter defaults
    new { page = @"'d+", sortColumn = @"['w-]+", sortDirection = @"asc|desc" } // Route constraints
);

由于sortColumnsortDirection参数都设置为UrlParameter.Optional,所以我不应该简单地用指定的page参数加载路由吗?

更新:

好的,在挖掘了另一个类似主题的StackOverflow答案后,如果你选择了一个可选的路由,那么约束也必须是可选的。因此,将我的路线限制更改为:
new { page = @"'d*", sortColumn = @"['w-]*", sortDirection = @"(asc|desc)?" }
它只需测试零个或多个匹配项,就可以在所有帐户上加载我的页面。

但是,如果我尝试创建一个反映(@Html.RouteLink("test 2", "Users", new { page = 2 })(的路由链接,则超链接将生成为/users,而不是/users/2!奇怪的是,如果我手动点击/users/2,那么RouteLink就会写为/users/2 lol Argh!:(

也许我确实需要制定单独的路线,但这真的不可取,因为我不想在Html.RouteLink()中调用不同名称的路线。。。。想法?

路线.MapRoute()导致404未找到

因为您提供了两个参数,但它需要3个可选参数。。所以它不知道哪一个失踪了。。。

通常情况下,不能使用两个连续的可选参数。

参考

  • http://weblogs.asp.net/imranbaloch/archive/2010/12/26/routing-issue-in-asp-net-mvc-3-rc-2.aspx
  • http://connect.microsoft.com/VisualStudio/feedback/details/630568/url-routing-with-two-optional-parameters-unspecified-fails-on-asp-net-mvc3-rc2