You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Microsoft Graph API获取组成员时members为空的问题求助

问题解答

为何members集合为空?

Microsoft Graph API 默认不会自动加载关联的实体集合(比如组的members),你当前的请求仅获取了组的基础属性(如DisplayName、Mail),因此members字段会返回null,这是API的默认行为,和权限配置无关。

如何获取该组的所有成员?

有两种可行的实现方式,具体如下:

方式一:请求组时展开members集合

在获取组的请求中添加$expand参数,让API同时返回组的成员数据。代码示例:

ClientSecretCredential clientSecretCredential = new ClientSecretCredential(tenantId, clientId, clientSecret);
GraphServiceClient graphClient = new GraphServiceClient(clientSecretCredential, scopes);

var groups2 = await graphClient.Groups.GetAsync(requestConfiguration =>
{
    requestConfiguration.QueryParameters.Filter = "mail eq 'IntranetTest365@xxx.se'";
    // 添加Expand参数展开members集合
    requestConfiguration.QueryParameters.Expand = new string[] { "members" };
});

注意:如果组内成员数量超过100个,API会返回分页数据,需要通过@odata.nextLink继续请求后续页才能获取全部成员。

方式二:单独调用组的members端点获取

先获取目标组的ID,再通过组ID单独请求成员列表,这种方式更适合成员数量较多的场景,同样需要处理分页:

ClientSecretCredential clientSecretCredential = new ClientSecretCredential(tenantId, clientId, clientSecret);
GraphServiceClient graphClient = new GraphServiceClient(clientSecretCredential, scopes);

// 第一步:获取目标组的ID
var targetGroup = await graphClient.Groups.GetAsync(requestConfiguration =>
{
    requestConfiguration.QueryParameters.Filter = "mail eq 'IntranetTest365@xxx.se'";
    requestConfiguration.QueryParameters.Select = new string[] { "id" }; // 仅获取必要的ID字段
});

if (targetGroup.Value != null && targetGroup.Value.Any())
{
    string groupId = targetGroup.Value.First().Id;
    var allMembers = new List<DirectoryObject>();
    
    // 第二步:获取成员列表并处理分页
    var membersPage = await graphClient.Groups[groupId].Members.GetAsync();
    allMembers.AddRange(membersPage.Value);
    
    while (!string.IsNullOrEmpty(membersPage.OdataNextLink))
    {
        membersPage = await graphClient.Groups[groupId].Members.WithUrl(membersPage.OdataNextLink).GetAsync();
        allMembers.AddRange(membersPage.Value);
    }
    
    // allMembers 即为该组的所有成员
}

额外注意事项

  • 确认你的应用配置的GroupMember.Read.All是应用权限,而非委托权限。因为你使用的是ClientSecretCredential(客户端凭据流),该认证方式仅支持应用权限,且需要管理员授予同意。
  • 无论哪种方式,都必须处理分页逻辑,否则只能获取到第一页的成员数据(最多100条)。

内容的提问来源于stack exchange,提问作者Zealot 0150

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 03:56:06