ASP.NET MVC 2中具有约束的可选路由参数?

时间:2010-08-12 13:27:00

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

如果我有这样的路线:

routes.Add(new Route("{controller}/{page}", 
    new RouteValueDictionary
    {
        { "page", UrlParameter.Optional }
    },
    new RouteValueDictionary
    {
        { "page", @"[Pp]age\d+" }
    }, 
    new MvcRouteHandler()
));

然后当缺少{page}时路线不匹配,但是如果我删除它匹配的约束。这是一个错误还是一个功能?

2 个答案:

答案 0 :(得分:9)

我在正则表达式中使用 ^ $ | ,例如:(^ $ | [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]" });

答案 1 :(得分:8)

这是一个特征:如果参数是可选的,约束如何匹配?您可能要么将“page”的默认值设置为“Page1”以解决您的问题,或者将您的正则表达式替换为“([Pp] age \ d +)?”不允许任何事情匹配(我不确定这个并且无法测试它)。