Note: 我最初提出这个问题 https://github.com/microsoftgraph/msgraph-sdk-dotnet/issues/66在客户端库存储库中,他们回复说这是服务库中的问题,而不是 .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)
可能会更清楚。
经过一番查看后,我找到了一个返回用户所有组的答案。
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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)