在我的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的方法设置为"很多"匹配路线?不应该很多"很多"是URL的强制性部分吗?
当我发布到http://server/api/Products/many时,会调用正确的方法。
我知道我可以通过在Route属性中指定Order来解决问题,但我想了解为什么会发生这种情况。
修改:
刚刚发现如果我在Create-method中添加了一个空路径,它可以按我的意愿工作:
[Route("")] // <-- ADDED THIS
[HttpPost]
public virtual IHttpActionResult Create([FromBody]TDto value) { ... }
[Route("many")]
[HttpPost]
public virtual void CreateMany([FromBody]TDto[] value) { ... }
如果有人能解释为什么会发生这种情况,我仍然全力以赴: - )
答案 0 :(得分:0)
好吧,也许这毕竟不是那么奇怪......
在我原来的设置中,这就是:
将[Route(&#34;&#34;)]添加到第一种方法后,会发生以下情况:
我认为我认为RouteAttribute禁用了该方法的&#34; DefaultApi&#34; -route。显然情况并非如此。