Маршрутизация атрибута - включить прямую косую черту в параметр, потребляемый 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 ключ.

0 ответов

Другие вопросы по тегам