【发布时间】:2018-04-17 03:35:43
【问题描述】:
我们有一个IRouteConstraint,它得到的检查比它应该得到的要多得多。经过进一步测试,看起来[Route] 上的Order 被路由约束忽略了。
例如,如果我有以下约束:
public class TestConstraint : IRouteConstraint {
public bool Match(
HttpContextBase httpContext,
Route route,
string parameterName,
RouteValueDictionary values,
RouteDirection routeDirection
) {
Debug.WriteLine("TestConstraint");
return true;
}
}
然后接线:
constraintResolver.ConstraintMap.Add("testConstraint", typeof(TestConstraint));
并且有以下路线:
public partial class HomeController {
[Route("test/0", Order = 1)]
public ActionResult Test0() {
return Content("Test0");
}
[Route("{someParam}/{test:testConstraint}", Order = 10)]
public ActionResult Test1() {
return Content("Test1");
}
}
然后请求http://localhost/test/0,它会返回正确的内容(Test0),但TestContraint.Match()仍然被执行。
我认为只有在RouteTable 中遇到路由时才会执行路由约束,但它似乎在每个 可以匹配[Route] 模式的请求上运行它。 p>
如果它有所作为,我们使用的是 ASP.NET MVC v5.2.4。
【问题讨论】:
-
它会返回正确的内容(Test1) - 你的意思是
"Test0"? -
@StephenMuecke 是的,感谢您的指出。已更正。
标签: asp.net-mvc asp.net-mvc-5 attributerouting