如何设置web api控制器Post方法

时间:2014-12-01 19:58:52

标签: asp.net-web-api2 asp.net-mvc-5.1

我正在更改我的项目以将多个对象发布到我的数据库表。我遇到的问题是,在我更改了Post方法后,我不知道如何使用对象的Id返回创建的路径。我之前没有这样做过,所以我相信在其他所有方面我都是正确的。

 public async Task<IHttpActionResult> PostNewPurchaseOrderDetail([FromBody]IEnumerable<PurchaseOrderDetail> newPurchaseOrderDetail)
    {
        try
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            using (var context = new ApplicationDbContext())
            {
                context.PurchaseOrderDetails.AddRange(newPurchaseOrderDetail);
                await context.SaveChangesAsync();
                return CreatedAtRoute("PurchaseOrderDetailApi", new { newPurchaseOrderDetail.PurchaseOrderDetailId }, newPurchaseOrderDetail);
            }
        }
        catch (Exception ex)
        {
            return this.BadRequest(ex.Message);
        }
    }

错误消息

  

错误2&#39; System.Collections.Generic.IEnumerable&#39;不包含&#39; PurchaseOrderDetailId&#39;的定义没有扩展方法&#39; PurchaseOrderDetailId&#39;接受类型为'System.Collections.Generic.IEnumerable&#39;的第一个参数。可以找到(你错过了使用指令或程序集引用吗?)C:\ Development \ TexasExterior \ TexasExterior \ apiControllers \ apiPurchaseOrderDetailController.cs 58 98 TexasExterior

1 个答案:

答案 0 :(得分:1)

错误告诉您究竟是什么问题。您变量newPurchaseOrderDetailPurchaseOrderDetail的可枚举,并且您试图直接引用PurchaseOrderDetail的属性。您需要从列表中获取单个项目才能调用该属性。例如:

return CreatedAtRoute("PurchaseOrderDetailApi", new { newPurchaseOrderDetail.First().PurchaseOrderDetailId }, newPurchaseOrderDetail);

注意.First()。但是,这只会给你集合中第一个项目的id,这可能不是你想要的。我不确定你的CreatedAtRoute方法做了什么或它是如何工作的,但你可以改变第二个参数以期望一组id,然后传递类似的东西:

newPurchaseOrderDetail.Select(m => m.PurchaseOrderDetailId)

哪个会给你一个id列表。