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

如果我有这样的路线:

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

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

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

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