Маршрутизация атрибута - включить прямую косую черту в параметр, потребляемый IRouteConstraint?
Я экспериментирую с маршрутизацией на основе атрибутов - она выглядит великолепно, но у меня есть одна проблема.
Я просмотрел документы (attterouting.net) и SO, но не могу понять, как использовать пользовательское ограничение маршрута и передать параметр, который включает косую черту. Например, URL.
Атрибут на контроллере:
[GET("{url:CustomURLConstraint}")]
public ActionResult DisplayByURL(string url)
{
...
}
IRouteConstraint:
public class CustomURLConstraint: IRouteConstraint
{
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
string urlToTest = values[parameterName].ToString();
....test for url here...
}
}
Это прекрасно работает.... за исключением случаев, когда URL содержит косую черту, это дает мне 404.
Поэтому я добавил звездочку в параметр маршрута, например:
[GET("{*url:CustomURLConstraint}")]
public ActionResult DisplayByURL(string url)
{
...
}
Но теперь я не могу получить доступ к значению в классе IRouteConstraint.
В методе Match в CustomURLConstraint значение values[parameterName]
проникает через всеобщую звезду - как *url
,
Значения маршрута проходят с action
а также controller
как и ожидалось, но с ключом url
как ноль. Здесь нет *url
ключ.