C#Azure AD Graph获取组中超过20个的所有成员

时间:2018-09-24 14:19:24

标签: c# azure-active-directory azure-ad-graph-api

我正在尝试从Azure AD获取特定组中的所有用户。当前有480个用户。当我获取它们时,我只能得到20,我认为这是默认设置吗?

var users = await _gsc.Groups["GROUP_ID"].Request().Expand("members").GetAsync();

我该如何全部获取?

编辑:

好像我删除了.Expand(“ members”)并使用.Members.Request()。GetAsync(),结果上有一个NextPageResult选项...我将尝试一下。

2 个答案:

答案 0 :(得分:1)

是的,您是正确的。这是$ expand参数的限制。

如果要所有组,请检索member属性,然后跟随oData.NextLink(如果存在于结果页面中)。以下链接描述了几种与组相关的功能: https://msdn.microsoft.com/en-us/library/azure/ad/graph/api/groups-operations

有些功能也可用于组传递,只需遵循通常位于以上链接右侧的导航链接即可。

答案 1 :(得分:0)

是的,正如Mohit_Garg提到的,返回的最大对象数为20。有关更多信息,请参见Supported queries, filters, and paging options | Graph API concepts

  

以下限制适用于$ expand表达式:

     
      
  • 一个请求最多返回20个对象。
  •   

  

好像我删除了.Expand(“ members”)并使用.Members.Request()。GetAsync(),结果上有一个NextPageResult选项...我将尝试一下。

是的,您是对的。我们可以使用 NextPageRequest 获取所有记录。页数是100。

以下是演示代码。

IGroupMembersCollectionWithReferencesPage users = _gsc.Groups["GROUP_ID"].Members.Request().GetAsync().Result;
do
{

   Console.WriteLine("number:" + users.Count);
   foreach (var usr in users)
   {
       Console.WriteLine("user: {0}", usr.Id);
   }
} 
while(users.NextPageRequest != null && (users = users.NextPageRequest.GetAsync().Result).Count > 0);