Microsoft Graph API SDK BatchRequest -Filter by userprincipa



我正在尝试使用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();
}

最新更新