[英]Microsoft Graph API Pagination is not working for getting all users from Azure AD
我们正在使用Microsoft Graph API Beta 版使用以下代码从 Azure AD 检索所有用户。 API 在响应中仅返回 100 个用户,为了使用分页响应,我们尝试了NextPageRequest
属性。 但它总是为NextPageRequest
属性返回null
。 因此,它永远不会进入 while 循环以检索用户的 rest。
测试版 SDK 版本:4.0.1.0
代码:
List<User> usersList = new List<User>();
IGraphServiceUsersCollectionPage users = await graphClient.Users.Request().GetAsync();
// Add the first page of results to the user list
usersList.AddRange(users.CurrentPage);
// Fetch each page and add those results to the list
while (users.NextPageRequest != null)
{
users = await users.NextPageRequest.GetAsync();
usersList.AddRange(users.CurrentPage);
}
log.Info("Users count: " + usersList.Count.ToString());
return usersList;
我遵循的参考链接:
对此的任何帮助将不胜感激!
下面的代码对我来说非常好。
public static async Task<List<User>> getUsers()
{
List<User> usersList = new List<User>();
graphClient.BaseUrl = "https://graph.microsoft.com/beta";
IGraphServiceUsersCollectionPage users = await graphClient.Users
.Request()
.GetAsync();
usersList.AddRange(users.CurrentPage);
while (users.NextPageRequest != null)
{
users = await users.NextPageRequest.GetAsync();
usersList.AddRange(users.CurrentPage);
}
return usersList;
}
检查 Azure Active Directory 用户刀片中的用户,并查看其中存在多少用户。 此外,您还可以通过简单地使用 $top 查询参数扩展代码来测试用户数量是否超过 100,该参数为每个请求提供 998 条记录,如下所示。
IGraphServiceUsersCollectionPage users = await graphClient.Users
.Request()
.Top(998)
.GetAsync();
您还可以在Graph Explorer中测试 Graph API 调用。
编辑:
经过长时间的研究,我发现它是 Microsoft Graph Beta SDK 中的一个错误,因为它总是在NextPageRequest
中发送 null 。 但这里有趣的是,它在AdditionalData
属性中发送odata.nextLink
。 因此,如果您使用的是 Graph Beat SDK,请使用以下代码。
public static async Task<List<User>> getUsers()
{
List<User> usersList = new List<User>();
IGraphServiceUsersCollectionPage users = await graphClient.Users
.Request()
.GetAsync();
usersList.AddRange(users.CurrentPage);
try
{
while (users.AdditionalData["@odata.nextLink"].ToString() != null)
{
users.InitializeNextPageRequest(graphClient, users.AdditionalData["@odata.nextLink"].ToString());
users = await users.NextPageRequest.GetAsync();
usersList.AddRange(users.CurrentPage);
}
}
catch(Exception e)
{
}
return usersList;
}
注意: Microsoft 不建议在生产中使用其Graph Beta 版本,因为它们可能会发生变化。
我正在添加以下代码,以便它可以帮助 java 开发人员解决此问题。
它不是对该线程的回答,而是针对 java 用户的。
graphServiceClient = graphConnection.getGraphConnection();
List<User> users = new ArrayList<>();
UserCollectionPage usersPage = graphServiceClient.users().buildRequest().select(COLUMN_NAMES)
.expand("manager($select=id,givenName,mail,userPrincipalName)").get();
while (usersPage != null) {
final List<User> currentPageUsers = usersPage.getCurrentPage();
users.addAll(currentPageUsers);
UserCollectionRequestBuilder nextPage = usersPage.getNextPage();
if (nextPage == null) {
break;
} else {
usersPage = nextPage.buildRequest().get();
}
}
return users;
这是工作代码。 我已经测试了 200 个用户。 允许的最大页面大小为 100。我尝试了 top(999),它每页最多只能获取 100。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.