1

我正在试验基于属性的路由——它看起来很棒,但我有一个问题。

我已经搜索了文档(attributerouting.net)和 SO,但我无法弄清楚如何使用自定义路由约束并传入包含正斜杠的参数。例如一个网址。

控制器上的属性:

    [GET("{url:CustomURLConstraint}")]
    public ActionResult DisplayByURL(string url)
    {
        ...
    }

IRoute 约束:

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 类中的值。

在 CustomURLConstraint 的 Match 方法中, 的值values[parameterName]来自于全能星 - as *url

路由值按预期通过actionand传递,但键为 null。没有钥匙。controllerurl*url

4

0 回答 0