路线.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
);
由于sortColumn
和sortDirection
参数都设置为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()
中调用不同名称的路线。。。。想法?
因为您提供了两个参数,但它需要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