Необязательный параметр маршрутизации с ограничением в ASP.NET MVC 2? - PullRequest
10 голосов
/ 12 августа 2010

Если у меня есть маршрут, подобный этому:

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

Тогда маршрут не совпадает, когда {страница} отсутствует, однако, если я удалю ограничение, оно совпадает.Это ошибка или особенность?

Ответы [ 2 ]

9 голосов
/ 25 июня 2013

Я использую ^ $ | в регулярном выражении, например: (^ $ | [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]" });
8 голосов
/ 12 августа 2010

Это особенность: как может совпадать ограничение, если параметр является необязательным? Возможно, вы захотите установить значение «page» по умолчанию для «page1», чтобы решить вашу проблему, или заменить регулярное выражение на «([Pp] age \ d +)?» чтобы ничто не совпадало (я не уверен насчет этого и не могу проверить его).

...