gpt4 book ai didi

asp.net-mvc - 如何在 ASP.net MVC 4 RouteConfig.cs 中使用约束?

转载 作者:行者123 更新时间:2023-12-04 10:40:50 26 4
gpt4 key购买 nike

我正在尝试使用最新的 asp.net mvc 4 架构来获得一些路由约束。在 App_Start 下有一个名为 RouteConfig.cs 的文件。

如果我从下面的示例中删除约束部分,则 url 有效。但我需要添加一些约束,以便 url 不匹配所有内容。

应该工作:/videos/rating/1

不工作:/videos/2458/Text-Goes-Here

这就是我所拥有的:

//URL: /videos/rating/1
routes.MapRoute(
name: "Videos",
url: "videos/{Sort}/{Page}",
defaults: new { controller = "VideoList", action = "Index", Sort = UrlParameter.Optional, Page = UrlParameter.Optional },
constraints: new { Sort = @"[a-zA-Z]", Page = @"\d+"}
);

最佳答案

如果您希望在同一路由上使用多个可选参数,则会遇到麻烦,因为您的 url 必须始终指定第一个参数才能使用第二个。仅仅因为您使用约束并不会阻止它评估参数,而是无法匹配此路由。

以此为例:/videos/3
当它试图匹配时,它会找到视频,然后说,“好的,我仍然匹配”。然后它查看下一个参数,即 Sort 并获得值 3,然后根据约束检查它。约束失败,所以它说“OPPS,我不匹配这条路线”,然后移动到下一条路线。为了指定没有定义 sort 参数的页面,您应该定义 2 个路由。

//URL: /videos/rating/1
routes.MapRoute(
name: "Videos",
url: "videos/{Sort}/{Page}",
defaults: new { controller = "VideoList", action = "Index", Page = UrlParameter.Optional },
constraints: new { Sort = @"[a-zA-Z]+", Page = @"\d+"}
);

//URL: /videos/1
routes.MapRoute(
name: "Videos",
url: "videos/{Page}",
defaults: new { controller = "VideoList", action = "Index", Sort = "the actual default sort value", Page = UrlParameter.Optional },
constraints: new { Page = @"\d+"}
);

我尽可能将最具体的路线放在第一位,并以最不具体​​的路线结束,但在这种情况下,由于限制,顺序应该无关紧要。我所说的具体指的是大多数定义的值,所以在这种情况下,你必须在第一个路由中定义排序,并且你也可以指定页面,所以它比只有页面参数的路由更具体。

关于asp.net-mvc - 如何在 ASP.net MVC 4 RouteConfig.cs 中使用约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13651208/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com