【发布时间】:2015-02-27 16:21:26
【问题描述】:
在 WebAPI 中,您可以在 RouteAttribute 中指定 Order 来确定路由匹配的顺序。例如,在将 /blah 匹配到 GetByName 之前,下面将匹配 /other 到 GetOther
[HttpGet, Route("{name}", Order = 1)]
public string GetByName(string name) { ... }
[HttpGet, Route("other")]
public string GetOther() { ... }
如果使用RoutePrefix(它没有Order 属性),我将如何做同样的事情?如果是这样,它看起来像这样:
[RoutePrefix("foo", Order = 1)]
public class FooController : ApiController { ... }
[RoutePrefix("foo/bar")]
public class FooBarController : ApiController { ... }
执行上述操作(没有虚构的Order 属性)在调用/foo/bar 时会引发以下消息:
找到多个与 URL 匹配的控制器类型
是否有解决此问题的现有功能(最好带有属性)?
【问题讨论】:
-
老实说,即使我回答了这个问题,对我来说也没有任何意义。
RoutePrefix本身并没有声明路由,因此它不能有任何Order。相反,它是其控制器中所有路由属性操作的前缀。所以你不能订购它,因为它只是一个前缀。除非您说您希望所有具有该前缀(在该控制器中)的路由在具有另一个前缀(在不同控制器中)的路由之前注册。我的观点是你需要一个完全不同的属性,比如RoutingPrecedenceAttribute,它可能有Order。
标签: c# asp.net-web-api2 attributerouting