这个问题通常是由于未正确实现批量更新的处理程序所致。下面是一种可能的解决方案:
确认是否使用了正确的 OData NuGet 包。批处理功能需要引用 Microsoft.AspNet.OData(版本 7.0 或更高版本)。
创建一个用于处理批处理请求的控制器。
[HttpPost]
public async Task Batch()
{
var reader = new StreamReader(Request.Body);
var content = await reader.ReadToEndAsync();
var response = await HttpContext.ProcessBatchAsync(content);
return new ContentResult
{
Content = response.Content,
ContentType = "multipart/mixed",
StatusCode = (int)response.StatusCode
};
}
此代码将批处理请求转发给 HttpContext.ProcessBatchAsync() 方法进行处理,并返回处理后的响应。
public override async Task ProcessBatchRequest(
HttpContext context, string content, RequestDelegate nextHandler)
{
var response = new ODataBatchResponseItem();
var batchReader = new ODataBatchReader(new StringReader(content));
while (batchReader.Read())
{
switch (batchReader.State)
{
case ODataBatchReaderState.Initial:
response.StatusCode = StatusCodes.Status400BadRequest;
return response;
case ODataBatchReaderState.ChangesetStart:
response.StatusCode = StatusCodes.Status400BadRequest;
return response;
case ODataBatchReaderState.Operation:
var operation = batchReader.CreateOperationRequestMessage();
if (operation.Method == "PATCH")
{
// 检查更新的实体是否存在。
var keyValues = operation.GetUriKeyValuePairs();
var entityType = Model.FindDeclaredType(keyValues.First().Value.TypeName) as IEdmEntityType;
var key = new Dictionary();
foreach (var keyValue in keyValues)
{
key.Add(keyValue.Key, keyValue.Value.Value
上一篇:ASP.NETCoreOData接口中使用[FromOdataUri]参数的Swagger
下一篇:ASP.NetCoreOData中出现的'Therequestmatchedmultipleendpoints”错误。