C# 使用RouteAttribute的Web API路由-发现多个操作与请求匹配

C# 使用RouteAttribute的Web API路由-发现多个操作与请求匹配,c#,asp.net-web-api2,asp.net-web-api-routing,C#,Asp.net Web Api2,Asp.net Web Api Routing,在我的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: "Def

在我的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}")
当我发布到时,我得到以下错误:“发现多个操作与请求匹配:在类型ProductsController上创建,在类型ProductsController上创建多个”

为什么RouteAttribute设置为“many”的方法与路由匹配?“许多”不应该是URL的强制部分吗

当我发布到正确的方法时,将调用该方法

我知道我可以通过在Route属性中指定顺序来解决这个问题,但我想了解为什么会发生这种情况

编辑
刚刚发现,如果我在Create方法中添加了一个空路由,它可以按照我的要求工作:

[Route("")] // <-- ADDED THIS
[HttpPost]
public virtual IHttpActionResult Create([FromBody]TDto value) { ... }

[Route("many")]
[HttpPost]
public virtual void CreateMany([FromBody]TDto[] value) { ... }

[Route(“”)/好吧,也许这并不奇怪

在我最初的设置中,会发生以下情况:

  • 对其进行POST时,它会根据其RouteAttribute匹配第二个方法。无需检查“DefaultApi”-路由。那就行了
  • 当对其进行POST时,它不匹配任何RouteAttribute路由,因此它会检查“DefaultApi”-路由,并且两个方法都匹配配置中的路由。我得到了“多重动作…”-例外
将[Route(“”)添加到第一个方法后,会发生以下情况:

  • 到的帖子仍然以同样的方式工作
  • 对其进行POST时,将匹配新(空)RouteAttribute。无需检查“DefaultApi”-路由。一切正常
我认为RouteAttribute为该方法禁用了“DefaultApi”——路由。显然情况并非如此