2014-01-27 4 views
3

Как я понимаю, если у меня есть метод ASP.NET WebAPI чью подпись выглядит так ...ASP.NET WebApi - как отправить коллекцию методу WebApi?

public HttpResponseMessage PostCustomer(Customer customer) { 
    // code to handle the POSTed customer goes here 
} 

..то модель WebAPI связывание будет выглядеть через коллекцию форм и посмотреть, если он имеет запись которые соответствуют именам свойств класса Customer и привязывают их к новому экземпляру класса, который передается методу.

Что делать, если я хочу разрешить некоторым POST коллекцию объектов? Другими словами, я хочу иметь метод WebAPI который выглядит следующим образом ...

public HttpResponseMessage PostCustomers(IEnumerable<Customer> customers) { 
    // code to handle the POSTed customers goes here 
} 

Как бы код вызова Выставьте POST?

Тот же вопрос применяется, если я хочу, чтобы объект Customer имел свойство, являющееся коллекцией, например, распоряжения клиента. Как настроить HTTP POST?

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

Любой, кто может помочь?

+1

вы собираетесь для RESTful шаблон? Если это так, операции должны быть на одном уровне. – Maess

+0

Честно говоря, я собираюсь сделать самый простой способ заставить его работать! Разработчик Delphi хочет отправить целую кучу данных за один раз, следовательно, вопрос. Я не возражаю против того, что происходит в одном, но он говорит, что это вызовет у него проблемы. Я бы хотел, чтобы он мог отправить коллекцию, если это возможно. Это можно сделать? Спасибо –

+1

@AvrohomYisroel: что вы конкретно ищете? как будет выглядеть формат запроса? может ли ваш клиент Delphi отправлять данные в формате Json? если да, то пример того, как будет выглядеть коллекция объектов в json, будет [{«Age»: 10, «Id»: 1}, {«Age»: 35, «Id»: 2}, {«Age»: 23, «Id»: 3}] –

ответ

1

Это прекрасно работает.

[ResponseType(typeof(Customer))] 
public async Task<IHttpActionResult> PostCustomer(IEnumerable<Customer> customers) 
{ 
    if (!ModelState.IsValid) 
    { 
     return BadRequest(ModelState); 
    } 
    db.Customers.AddRange(customers); 
    await db.SaveChangesAsync(); 
    return StatusCode(HttpStatusCode.Created); 
} 

Клиентский код для POST несколько объектов:

public async Task<string> PostMultipleCustomers() 
{ 
     var customers = new List<Customer> 
     { 
      new Customer { Name = "John Doe" }, 
      new Customer { Name = "Jane Doe" }, 
     }; 
     using (var client = new HttpClient()) 
     { 
      HttpResponseMessage response = await client.PostAsJsonAsync("http://<Url>/api/Customers", customers); 
      if (response.IsSuccessStatusCode) 
      { 
       var result = await response.Content.ReadAsStringAsync(); 
       return result; 
      } 
      return response.StatusCode.ToString();    
     } 
} 
+0

Как это помогает? Я спросил, как настроить HTTP-сообщение от потребителя вызова веб-API.Вы указали код для самого веб-интерфейса API, который никогда не был проблемой. –

+0

Получил вашу точку @AvrohomYisroel, см. Править. –

Смежные вопросы