使用 Microsoft Graph 客户端库访问 user.MemberOf

fra*_*ick 7 c# microsoft-graph-api

注意:我最初在客户端库存储库中提出了这个问题,他们回复说这是服务库中的问题,而不是 .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)可能会更清楚。

Dan*_*SFT 0

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

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

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

希望这可以帮助,