[英]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.