WebApi OData 4,控制器中批量插入的第二个 POST 端点
WebApi OData 4 , second POST endpoint for bulk insertion in the controller
我有一个用于 TEAM 模型的基本 WebApi OData 4 控制器,它有一个 POST 操作用于将新的 TEAM 添加到数据库。
public async Task<IHttpActionResult> Post(USER_TEAMS userTeam)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
context.USER_TEAMS.Add(userTeam);
await context.SaveChangesAsync();
return Created(userTeam);
}
我想在该控制器中有另一个端点,用于批量插入 团队,它获取团队对象列表并将它们添加到数据库中。 WebApi OData 4 中最好的方法是什么?
OData 规范中包含一个 batching concept, but for this problem an OData action 更简洁的解决方案。该操作将绑定到 Teams 实体集,并将接受请求负载中 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"}]}
我有一个用于 TEAM 模型的基本 WebApi OData 4 控制器,它有一个 POST 操作用于将新的 TEAM 添加到数据库。
public async Task<IHttpActionResult> Post(USER_TEAMS userTeam)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
context.USER_TEAMS.Add(userTeam);
await context.SaveChangesAsync();
return Created(userTeam);
}
我想在该控制器中有另一个端点,用于批量插入 团队,它获取团队对象列表并将它们添加到数据库中。 WebApi OData 4 中最好的方法是什么?
OData 规范中包含一个 batching concept, but for this problem an OData action 更简洁的解决方案。该操作将绑定到 Teams 实体集,并将接受请求负载中 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"}]}