我正在尝试使用microsoft graph api从Azure AD中拉多个用户Microsoft.Graph.Beta SDK使用userprincipalname.
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);
}
}
}
对用户端点的相同请求没有batch返回数据,而在batchrequest中返回空。在使用sdk时,批处理端点与userPrincipalName一起工作是否有任何限制?
批处理大小确实有限制。如下所示:
JSON批处理请求目前限制为20个单独的请求。
它与你的$过滤器没有任何关系。因为这在用户端点上是完美的。
更新:看到代码后,我认为问题在于将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();
}