2014-12-01 80 views
0

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

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“System.Collections.Generic.IEnumerable”不包含关于“PurchaseOrderDetailId”和没有扩展方法“PurchaseOrderDetailId”接受类型的第一个参数的定义“系统.Collections.Generic.IEnumerable”可以找到(是否缺少using指令或程序集引用吗?)C:\开发\ TexasExterior \ TexasExterior \ apiControllers \ apiPurchaseOrderDetailController.cs 58 98 TexasExterior

回答

1

错误告诉你到底是什么问题。您变量,newPurchaseOrderDetailPurchaseOrderDetail的枚举数,并且您试图直接引用属性PurchaseOrderDetail。您需要从列表中获取单个项目,然后才能致电该属性。例如:

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

请注意.First()。但是,这只会给你在集合中的第一个项目的ID,这可能不是你想要的。我不知道你的CreatedAtRoute方法做什么或它是如何工作的,但你可以改变的第二个参数预期ID的集合,然后通过类似:

newPurchaseOrderDetail.Select(m => m.PurchaseOrderDetailId) 

这将使你ID的列表。

相关问题