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