【问题标题】:Access user.MemberOf with Microsoft Graph Client Library使用 Microsoft Graph 客户端库访问 user.MemberOf
【发布时间】:2016-12-22 14:21:14
【问题描述】:

注意:I originally posed this question 在客户端库 repo 中,他们回应说这是服务库中的问题,而不是 .NET 库中的问题。

在开发过程中,我们一直在做这样的事情来获取用户组:

var user = await GraphClient.Users[userId].Request().Expand("memberOf").GetAsync();

其结果被提供给一个方法,该方法将使用可能返回的“NextPageRequest”对象来获取当前页面之外的结果。我们的虚假开发用户帐户以及早期的真实用户从来没有足够的组成员资格来要求 NextPageRequest 逻辑,并且忘记了对其进行测试。

在获得拥有 20 多个组的用户后,最终清楚的是,发出上述详细信息的请求会返回一页的成员资格,但不会返回 NextPageRequest 以用于后续请求的选项。您关于集合的文档看起来应该是这样的。

我相信你已经知道,一种可行的方法是这样的:

List<Group> userGroups = await GraphClient.Users[userId].MemberOf.Request().GetAsync().CurrentPage.Where(p => p.GetType() == typeof(Microsoft.Graph.Group)).Cast<Microsoft.Graph.Group>().ToList();

据我们所知,这会返回用户的所有组成员身份。如果意图是 Expand 不与“memberOf”一起使用,那么它根本不应该工作。现在,旧代码在租户中的 800 名用户中的大约 760 名用户中运行良好,其余的是编写检查的用户 :)。如果我们做错了 .Expand("memberOf"),请告诉我。

此外,GetMemberGroups 的工作方式与 MemberOf 不同。目的是什么?也许做类似GetMemberGroups(securityEnabledOnly = false, expandGroupInfo = false) 的事情可能会更清楚。

【问题讨论】:

  • 感谢您在 GitHub 上提出这个问题,这对我们帮助很大。

标签: c# microsoft-graph-api


【解决方案1】:

看了一些之后,我找到了一个为用户返回所有组的答案。

public async Task<List<string>> GetCurrentUserGroups(GraphServiceClient graphClient)
    {
        var totalGroups = new List<string>();
        var groups = await graphClient.Me.MemberOf.Request().GetAsync();

        while (groups.Count > 0)
        {
            foreach (Group g in groups)
            {
                totalGroups.Add(g.DisplayName);
            }
            if (groups.NextPageRequest != null)
            {
                groups = await groups.NextPageRequest.GetAsync();
            }
            else
            {
                break;
            }
        }
        return totalGroups;
    }

【讨论】:

    【解决方案2】:

    您的观察是正确的。 $expand 在目录中有些限制,最多只能展开 20 项,不支持分页。对于其他 Graph 服务,这不一定是正确的。请参阅https://graph.microsoft.io/en-us/docs/overview/query_parameters 和 $expand,其中记录了这一点。

    不幸的是,更改行为以返回不支持的错误,例如 $expand=memberOf 将代表一个重大更改。我们可以考虑对新版本进行此更改。

    我们还希望向 Graph 元数据文档添加更多注释,这些注释可能能够描述支持扩展和分页的位置。这也有助于限制客户端库不显示服务无法支持的选项。

    希望这会有所帮助,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多