ASP.NET MVC 2 中带有约束的可选路由参数?
Posted
技术标签:
【中文标题】ASP.NET MVC 2 中带有约束的可选路由参数?【英文标题】:Optional routing parameter with constraint in ASP.NET MVC 2? 【发布时间】:2011-03-28 22:36:34 【问题描述】:如果我有这样的路线:
routes.Add(new Route("controller/page",
new RouteValueDictionary
"page", UrlParameter.Optional
,
new RouteValueDictionary
"page", @"[Pp]age\d+"
,
new MvcRouteHandler()
));
然后当 page 丢失时路由不匹配,但是如果我删除它匹配的约束。这是错误还是功能?
【问题讨论】:
【参考方案1】:这是一个特性:如果参数是可选的,约束如何匹配?您可能希望将“page”的默认值设置为“Page1”以解决您的问题,或者将您的正则表达式替换为“([Pp]age\d+)?”不允许任何匹配(我不确定这个,也无法在 atm 测试它)。
【讨论】:
谢谢,设置一个默认值而不是 UrlParameter.Optional 就可以了。更改正则表达式无效。【参考方案2】:我在正则表达式中使用 ^$|,例如:(^$|[Pp]age\d+)。我在寻找这个问题的答案时发现了这个问题,并想我会在这里添加我找到的内容。
routes.MapRoute(
name: "News Archive",
url: "News/page",
defaults: new controller = "news", action = "List", page= UrlParameter.Optional ,
constraints: new page= @"^$|[0-9][0-9]" );
【讨论】:
以上是关于ASP.NET MVC 2 中带有约束的可选路由参数?的主要内容,如果未能解决你的问题,请参考以下文章