c# - 微软图: Invalid batch payload format

标签 c# azure azure-active-directory microsoft-graph-api azure-ad-b2c

我正在尝试批处理update用户列表,使用 example from the docs 之后的 MS Graph Batch API但收到错误“消息:无效的批处理负载格式。”

// batch disable all users
var allUsers = await GraphHelper.client.Users.Request().Select("id").GetAsync();

var batchRequestContent = new BatchRequestContent();
allUsers.Select(user =>
{
  var httpRequest = GraphHelper.client.Users[user.Id].Request().GetHttpRequestMessage();
  httpRequest.Method = HttpMethod.Put;
  httpRequest.Content = GraphHelper.client.HttpProvider.Serializer.SerializeAsJsonContent(new User { AccountEnabled = false });
  return batchRequestContent.AddBatchRequestStep(httpRequest);
});
var userUpdateResult = await GraphHelper.client.Batch.Request().PostAsync(batchRequestContent);

下面用于禁用用户的代码无需批处理即可运行。

var user = new User { AccountEnabled = false };
var userResult = await GraphHelper.client.Users[id].Request().UpdateAsync(user);

最佳答案

如果我使用 lambda 运算符,而不是将其更改为 foreach 循环并添加批处理请求,我也能得到相同类型的错误,如下所示。

static async Task<BatchResponseContent> BulkUpdate()
{
    var allUsers = await GraphHelper.graphClient.Users.Request().Top(10).Select("id").GetAsync();

    var batchRequestContent = new BatchRequestContent();
    foreach(var items in allUsers)
    { 
        var httpRequest = GraphHelper.graphClient.Users[items.Id].Request().GetHttpRequestMessage();
        httpRequest.Method = HttpMethod.Patch;
        httpRequest.Content = GraphHelper.graphClient.HttpProvider.Serializer.SerializeAsJsonContent(new User { AccountEnabled = false });
        batchRequestContent.AddBatchRequestStep(httpRequest);
    }
    var userUpdateResult = await GraphHelper.graphClient.Batch.Request().PostAsync(batchRequestContent);
    return userUpdateResult;
}

这样我就可以将批量请求添加到batchRequestContent变量中,如下图所示。

(JSON Data)Body of Batch Request

注意:JSON 批量请求当前为 limited最多 20 个单独请​​求。

关于c# - 微软图: Invalid batch payload format,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62370545/

相关文章:

c# - json.net Schema IsValid 慢

c# - 读取文本文件后重写它

c# - Quartz.Net - 死锁

c# - 如何在桌面应用程序中退出 Azure AD 2.0/MSAL?

c# - 如何在 C#.NET 中更改 TabPage 位置?

azure - 用户上次登录 - 导出

azure - 我是否能够使用 Azure IoT Edge 网关在叶设备和 Azure IoT 中心之间进行双向通信?

silverlight - 在 Silverlight 中检索响应 header ?

azure - 自动授予 Azure Active Directory Web 应用程序权限

node.js - 微软广告 B2C 问题 : policy is missing