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 中带有约束的可选路由参数?的主要内容,如果未能解决你的问题,请参考以下文章

与实体框架 ASP.net MVC 中多个表的可选关系

ASP.NET MVC 5 中的路由可选参数

ASP.Net MVC 2 RC2:当所有可选参数为空时,自定义路由返回 404

asp.net mvc 路由约束正则表达式

ASP.NET MVC学习之路由篇

asp.net mvc 之旅—— 第三站 路由模板中强大的自定义IRouteConstraint约束