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


person texas697    schedule 01.12.2014    source источник


Ответы (1)


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

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

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

newPurchaseOrderDetail.Select(m => m.PurchaseOrderDetailId)

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

person Chris Pratt    schedule 01.12.2014