我尝试使用基于属性的路由 - 它看起来很棒,但我遇到了一个问题。
我已经搜索了文档(attributerouting.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类中的值。
在CustomURLConstraint的匹配方法中,values[parameterName]
的值来自于所有明星 - *url
。
路由值按预期使用action
和controller
,但密钥url
为null。没有*url
密钥。