ASP.NET WebApi - 如何将集合发布到WebApi方法?

时间:2014-01-27 14:48:38

标签: c# asp.net http asp.net-web-api

据我了解,如果我有一个ASP.NET WebApi方法,其签名看起来像这样......

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

..然后WebApi模型绑定将查看表单集合并查看它是否具有与Customer类上的属性名称匹配的条目,并将它们绑定到类的新实例,该实例将传递给方法。

如果我想允许某些人发布一组对象怎么办?换句话说,我想要一个看起来像这样的WebApi方法......

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

调用代码如何设置POST?

如果我希望Customer对象具有属于集合的属性(例如客户的订单),则同样的问题也适用。如何设置HTTP POST?

问题的原因是我想编写一个控制器,允许使用Delphi的人向我的服务器发布信息。不知道这是否相关,但我想最好提一下以防万一。我可以看到他如何为单个对象执行此操作(请参阅第一个代码段),但无法看到他将如何为集合执行此操作。

任何人都可以提供帮助吗?

1 个答案:

答案 0 :(得分: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();              
         }
}