Ограничение маршрута ASP.NET MVC 3: регулярное выражение для ненулевого значения - PullRequest
2 голосов
/ 21 сентября 2011

Я пытаюсь создать ограничение маршрута, но не уверен, что будет лучшим для этого. Вот маршрут без ограничений:

context.MapRoute(
    "Accommodation_accomm_tags",
    "accomm/{controller}/{action}/{tag}",
    new { action = "Tags", controller = "AccommProperty" },
    new { tag = @"" } //Here I would like to put a RegEx for not null match
);

Что было бы лучшим решением для этого?

Ответы [ 3 ]

8 голосов
/ 21 сентября 2011

Не могли бы вы создать IRouteConstraint:

public class NotNullRouteConstraint : IRouteConstraint
{
  public bool Match(
    HttpContextBase httpContext, Route route, string parameterName, 
    RouteValueDictionary values, RouteDirection routeDirection)
  {
    return (values[parameterName] != null);
  }
}

Который вы можете подключить:

context.MapRoute(
  "Accommodation_accomm_tags",
  "accomm/{controller}/{action}/{tag}",
  new { action = "Tags", controller = "AccommProperty" },
  new { tag = new NotNullRouteConstraint() }
);
6 голосов
/ 21 сентября 2011

Зачем вам нужно ограничение для ненулевого / пустого соответствия? Обычно, если вы определяете свой маршрут следующим образом:

context.MapRoute(
    "Accommodation_accomm_tags",
    "accomm/{controller}/{action}/{tag}",
    new { action = "Tags", controller = "AccommProperty" },
);

и tag не указаны в URL запроса, этот маршрут просто не будет совпадать.

А если вы хотите, чтобы токен был необязательным, то:

context.MapRoute(
    "Accommodation_accomm_tags",
    "accomm/{controller}/{action}/{tag}",
    new { action = "Tags", controller = "AccommProperty", tag = UrlParameter.Optional },
);

Ограничения используются, когда вы хотите ограничить значение данного маркера маршрута в некотором определенном формате.

2 голосов
/ 21 сентября 2011

Сначала я попытался создать RegEx для пустой строки, равной ^$ (что будет нулевым). Однако не похоже, что ограничения маршрута могут быть !=. Как насчет сопоставления одного или нескольких символов с ^.+$?

Итак:

tag = @"^.+$"
...