Ray*_* A. 3 c# asp.net-core microsoft-graph-sdks microsoft-graph-api graphserviceclient
我想在我的项目中使用 PageIterator,它工作得很好,直到我想从 AzureAD 中取出组成员。无论我做什么,PageIterator 都会失败并显示“The Parsable does not contains a collection property”。
List<User> users = new();
var result = await graphClient.Groups[groupId].Members.GetAsync((requestConfiguration) =>
{
requestConfiguration.QueryParameters.Top = 2;
// I only do this to force pageing, will not be on final version
});
var pageIterator = PageIterator<User, DirectoryObjectCollectionResponse>
.CreatePageIterator(graphClient, result,
(m) =>
{
users.Add(m);
return true;
});
await pageIterator.IterateAsync();
Run Code Online (Sandbox Code Playgroud)
我的代码强制执行 2 项。这只是因为我绝望地试图找出我的代码出了什么问题。
我对这里出了什么问题一无所知,任何帮助都会很棒。
我在我这边重现了您的问题,并更改了代码,如下所示:
var pageIterator = PageIterator<DirectoryObject, DirectoryObjectCollectionResponse>
.CreatePageIterator(graphClient, result,
(m) =>
{
if (m.OdataType == "#microsoft.graph.group")
{
return true;
}
else if (m.OdataType == "#microsoft.graph.user")
{
users.Add((User)m);
return true;
}
else {
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
问题发生在响应类型上。列表成员 APIdirectoryObject将作为响应返回,但在您的代码中,您有PageIterator<User, DirectoryObjectCollectionResponse>导致错误的原因。
顺便说一句,如果我们只想获取用户成员,那么我们可以像这样更改代码:
var result = await graphClient.Groups["group_id"].Members.GraphUser.GetAsync((requestConfiguration) =>
{
requestConfiguration.QueryParameters.Top = 1;
});
var pageIterator = PageIterator < User, UserCollectionResponse>
.CreatePageIterator(graphClient, result,
(m) =>
{
users.Add(m);
return true;
});
Run Code Online (Sandbox Code Playgroud)