2014-01-27 43 views
3

據我瞭解,如果我有一個ASP.NET的WebAPI方法,其簽名看起來像這樣...ASP.NET WebApi - 如何將集合發佈到WebApi方法?

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

..then的的WebAPI模型綁定會去翻形式收集和查看其是否具有條目它們與Customer類中的屬性的名稱相匹配,並將它們綁定到傳入方法的新類實例。

如果我想允許一些POST一組對象,該怎麼辦?換句話說,我想要一個看起來像這樣的WebApi方法...

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

調用代碼如何設置POST?

如果我希望Customer對象具有屬性集合,比如說客戶的訂單,那麼同樣的問題也適用。如何設置HTTP POST?

問題的原因是我想編寫一個控制器,允許有人使用Delphi將信息發佈到我的服務器。不知道這是否相關,但我認爲我最好提一下它。我可以看到他是如何爲單個對象執行此操作的(請參閱第一個代碼段),但無法看到他如何爲集合執行此操作。

任何人都可以提供幫助嗎?

+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); 
} 

客戶端的代碼來發布多個實體:

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

這有什麼用?我問了如何從Web API調用的使用者設置HTTP帖子。你已經顯示了Web API本身的代碼,這從來都不是問題。 –

+0

明白你的意思@AvrohomYisroel,請參閱編輯。 –