OData规范包含batching概念,但对于此问题,OData action是更清晰的解决方案。该动作将被绑定到团队实体集合,并将接受请求有效负载中的Team
实体的集合。 (我在下面的代码改变USER_TEAMS
到Team
。)
鉴于Team
实体类型的以下简单的定义:
public class Team
{
public int Id { get; set; }
public string Name { get; set; }
}
首先,定义在同一个控制器的操作方法,你Post
方法。
[HttpPost]
public IHttpActionResult BulkAdd(ODataActionParameters parameters)
{
if (!ModelState.IsValid)
{
return BadRequest();
}
var newTeams = (IEnumerable<Team>)parameters["NewTeams"];
// Your data access layer logic goes here.
return this.StatusCode(HttpStatusCode.NoContent);
}
然后在您的Web API配置代码中声明OData动作。
var builder = new ODataConventionModelBuilder();
builder.Namespace = "TeamService";
builder.EntitySet<Team>("Teams");
builder.EntityType<Team>().Collection
.Action("BulkAdd")
.CollectionParameter<Team>("NewTeams");
注意在上面:
EntityTypeConfiguration<T>.Collection
需要绑定动作到Team
实体集(相对于单个Team
实体)
ActionConfiguration.CollectionParameter<T>
有必要指定该参数是集合(与标量对比)
在客户端上,按如下方式调用操作。
POST http://domain/Teams/TeamService.BulkAdd
Content-Type: application/json
{"NewTeams": [{"Name": "Demons"}, {"Name": "Angels"}]}
感谢您的明确回答! – Ehsan