2014-12-01 3 views
0

Я меняю проект, чтобы отправлять несколько объектов в таблицу db. Проблема, с которой я столкнулась, - после того, как я изменил метод Post, я не знаю, как вернуть созданный маршрут с идентификаторами объектов. Я не делал этого раньше, поэтому считаю, что верю во все остальное до этого момента.Как настроить веб-контроллер api Способ отправки

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» принимающему первый аргумент типа «System .Collections.Generic.IEnumerable»может быть найден (вы пропали без вести с помощью директивы или ссылка на сборку?) C: \ Разработка \ TexasExterior \ TexasExterior \ apiControllers \ apiPurchaseOrderDetailController.cs 58 98 TexasExterior

ответ

1

Ошибка сообщает вам, в чем проблема. Вы переменная, newPurchaseOrderDetail является перечислимой величиной PurchaseOrderDetail, и вы пытаетесь напрямую ссылаться на свойство PurchaseOrderDetail. Вам нужно получить один элемент из списка, прежде чем вы сможете вызвать его. Например:

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

Обратите внимание: .First(). Однако это даст вам только идентификатор первого элемента в коллекции, который, вероятно, не тот, который вы хотите. Я не уверен, что делает ваш метод CreatedAtRoute или как это работает, но вы можете изменить второй параметр ожидать коллекцию идентификаторов, а затем передать что-то вроде:

newPurchaseOrderDetail.Select(m => m.PurchaseOrderDetailId) 

который даст вам список идентификаторов.