我正在试验基于属性的路由——它看起来很棒,但我有一个问题。
我已经搜索了文档(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
。
路由值按预期通过action
and传递,但键为 null。没有钥匙。controller
url
*url