据我了解,如果我有一个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的人向我的服务器发布信息。不知道这是否相关,但我想最好提一下以防万一。我可以看到他如何为单个对象执行此操作(请参阅第一个代码段),但无法看到他将如何为集合执行此操作。
任何人都可以提供帮助吗?
答案 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();
}
}