【发布时间】:2015-05-27 16:35:27
【问题描述】:
在我的 Web API 2 项目中,我有两个 POST 方法:
[HttpPost]
public virtual IHttpActionResult Create([FromBody]TDto value) { ... }
[Route("many")]
[HttpPost]
public virtual void CreateMany([FromBody]TDto[] value) { ... }
我的路线模板如下所示:
config.Routes.MapHttpRoute(name: "DefaultApi", routeTemplate: "api/{controller}")
当我向http://server/api/Products 发送 POST 时,我收到以下错误:“找到与请求匹配的多个操作:在 ProductsController 类型上创建,在 ProductsController 类型上创建 CreateMany”
为什么RouteAttribute设置为“many”的方法匹配路由? “很多”不应该是 URL 的必填部分吗?
当我发布到http://server/api/Products/many 时,会调用正确的方法。
我知道我可以通过在 Route-attribute 中指定 Order 来解决这个问题,但我想了解为什么会这样。
编辑:
刚刚发现,如果我在 Create-method 中添加了一条空路由,它会按我的意愿工作:
[Route("")] // <-- ADDED THIS
[HttpPost]
public virtual IHttpActionResult Create([FromBody]TDto value) { ... }
[Route("many")]
[HttpPost]
public virtual void CreateMany([FromBody]TDto[] value) { ... }
如果有人能解释为什么会发生这种情况,我仍然全神贯注:-)
【问题讨论】:
标签: c# asp.net-web-api2 asp.net-web-api-routing