【问题标题】:Web API routing using RouteAttribute - Multiple actions were found that match the reques使用 Route 属性的 Web API 路由 - 找到多个匹配请求的操作
【发布时间】: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


    【解决方案1】:

    好吧,也许这并不奇怪……

    在我原来的设置中是这样的:

    • 当对http://server/api/Products/many 进行 POST 时,它通过其 RouteAttribute 匹配第二种方法。无需检查“DefaultApi”路由。这样就奏效了。
    • 当对http://server/api/Products 进行 POST 时,它不匹配任何 RouteAttribute 路由,因此它会检查“DefaultApi”路由,并且这两种方法都匹配配置中的路由。我收到“多项操作...”异常。

    将 [Route("")] 添加到第一个方法后,会发生以下情况:

    我认为我认为 RouteAttribute 禁用了该方法的“DefaultApi”路由。显然不是这样的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多