【问题标题】:Unable to POST to Web API endpoint using attribute routing无法使用属性路由 POST 到 Web API 端点
【发布时间】:2016-07-26 05:46:34
【问题描述】:

我有一个使用默认路由“api/{controller}/{id}”的 Web API 项目,其中“id”是可选的。在大多数情况下,这已经足够了,但在某些情况下,我需要属性路由。在这种特定情况下,我有“api/Customers/{customerID}/Orders/{orderID}”,其中客户 ID 是必需的,orderID 是可选的。最初我的代码只需要订单 ID,但我需要一种方法来为特定客户提取订单,因此我在方法上使用了属性路由来允许这样做。

我能够毫无问题地执行 GET 操作,但是当我尝试执行 POST 操作时,我收到 500 错误。奇怪的是我的对象被创建了,所以抛出的异常必须在创建数据库插入之后出现,但我无法确认这一点,因为我的调试器不起作用。我的 API 与我的 UI 位于一个单独的项目中,无论出于何种原因,我都无法让我的调试器在 API 项目中工作,因此我设置的断点不起作用。

我的 POST 方法中的最后一行代码是这样的:

return CreatedAtRoute("DefaultApi", new { id = order.ID }, order);

此方法的第一个参数是路由名称,上面列出的参数是 WebApiConfig.cs 中指定的默认路由。但是,此特定路线与默认路线不同:

[Route("api/Customers/{customerID:int}/Orders")]

这可能是问题吗?由于有问题的路由使用了两个参数,我假设我需要在 CreatedAtRoute 方法的 routeValues(第二个)参数中指定它们。

我需要做什么才能完成这项工作?我怀疑我在执行 PUT 和 DELETE 操作时也可能遇到问题,但我需要先创建一个对象才能修改或删除它。

【问题讨论】:

    标签: c# asp.net-web-api2 attributerouting


    【解决方案1】:

    好的,我自己解决了这个问题。我需要在路由上设置 Name 属性并将其用作 CreatedAtRouteMethod 的第一个参数。我只需要指定对应于两个方法参数的两个路由值。我还能够毫无问题地执行 PUT 和 DELETE 操作。

    [Route("api/Customers/{customerID:int}/Orders", Name = "Test")]
    
    return CreatedAtRoute("Test", new { customerID = customer.customerID, orderID = order.ID }, order);
    

    【讨论】:

      猜你喜欢
      • 2015-02-14
      • 1970-01-01
      • 2017-03-24
      • 2017-08-16
      • 1970-01-01
      • 2015-03-29
      • 2019-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多