【问题标题】:Microsoft Graph API SDK BatchRequest -Filter by userprincipalname returning emptyMicrosoft Graph API SDK BatchRequest - 按 userprincipalname 过滤返回空
【发布时间】:2021-10-01 17:15:52
【问题描述】:

我正在尝试使用 microsoft graph api 从 Azure AD 中提取多个用​​户 使用按 userprincipalname 过滤的 Dot Net Core Microsoft.Graph.Beta SDK 的批处理请求。

 var batchRequestContent = new BatchRequestContent();

 var queryOptions = new List<QueryOption>()
            {

                new QueryOption("$filter",$"userprincipalname eq '{email}'"),
                new QueryOption("$count","true"),
                new QueryOption("$select","id,mail")
            };

var request = client.Users.Request(queryOptions)       
                .Header("ConsistencyLevel", "Eventual")
                .Top(1);

var requestId = batchRequestContent.AddBatchRequestStep(request);
                emailWithRequestIds.Add(requestId, email);

var response = await 
               client.Batch.Request().PostAsync(batchRequestContent);

var responseList = await response.GetResponsesAsync();

  foreach (var key in responseList)
 {

  var email = emailWithRequestIds[key.Key];
  if (key.Value.StatusCode == HttpStatusCode.NotFound)
    {
       emailDictionary.Add(email, null);
    }
   else
    {
      key.Value.EnsureSuccessStatusCode();
      var responseContent = await key.Value.Content.ReadAsStringAsync();
      var parsedResponse = ValidateBatchResponse(responseContent, 
                           email);

      if (parsedResponse.Exists == true)
      {                             
       emailDictionary.Add(email,parsedResponse.Email);
      }
       else
       {
        emailDictionary.Add(email, null);
       }
     }
 }

对用户端点的相同请求没有批处理返回数据,而在批处理请求中它返回空。使用 sdk 时批处理端点与 userPrincipalName 一起使用是否有任何限制?

【问题讨论】:

  • 您能否用调用 Batch 端点的代码更新您的问题?
  • 你能告诉我ValidateBatchResponse(...)方法吗?如果 HttpResponse 内容未正确转换,您将获得一个空的 Microsoft.Graph.User。

标签: microsoft-graph-api microsoft-graph-sdks


【解决方案1】:

批量大小确实有限制。如here所述:

JSON 批量请求目前限制为 20 个单独的请求。

这与您的 $filter 无关。因为这与用户端点完美配合。

更新: 看到代码后,我认为问题在于将 HttpResponse 内容转换为Microsoft.Graph.User。如果转换没有正确完成,它将显示一个空的Microsoft.Graph.User

以下内容对我有用:

var responseList = await response.GetResponsesAsync();
foreach (var resp in responseList) 
{
    var userString = await resp.Value.Content.ReadAsStringAsync(); 
    var userCollection = await System.Text.Json.JsonSerializer.Deserialize<GraphServiceUsersCollectionResponse>(userString); 
    var user = userCollection.Value.SingleOrDefault();
}

【讨论】:

  • 这与批量请求大小无关。我一次只使用 15 个请求
  • @SandeepK 我已经更新了我的答案。这能解决你的问题吗?
  • 我会检查并更新。现在我使用rest api而不是sdk实现了这个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多