繁体   English   中英

Microsoft Graph API SDK BatchRequest - 按返回空的 userprincipalname 过滤

[英]Microsoft Graph API SDK BatchRequest -Filter by userprincipalname returning empty

我正在尝试使用 Microsoft Graph api 和 Dot Net Core Microsoft.Graph.Beta SDK 的 batchrequest 使用 userprincipalname 过滤器从 Azure AD 中拉取多个用户。

 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);
       }
     }
 }

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

batch size确实有限制。 如此所述:

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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM