【问题标题】:Optional routing parameter with constraint in ASP.NET MVC 2?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} 丢失时路由不匹配,但是如果我删除它匹配的约束。这是错误还是功能?

【问题讨论】:

    标签: c# asp.net-mvc-2 routing


    【解决方案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]" });
    

    【讨论】:

      猜你喜欢
      • 2011-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-25
      • 2014-08-31
      • 1970-01-01
      相关资源
      最近更新 更多