我通过Microsoft Graph从AzureAD请求用户列表。我得到了用户对象,但他们的MemberOf属性总是为空。我认为我可以使用Expand来特别请求该属性,虽然它不会导致错误,但也不会填充该属性。这个问题和2016年中期的问题和答案表明,该功能当时处于beta版,而我认为它现在已经进入了生产API?
如果获取属于该组的ID并过滤用户是正确的方法,那么我会跟随这种方法。理想情况下,我希望通过单个请求从服务器端检索用户对象并进行过滤。
例如:
显然,那个过滤器不会起作用,但类似的东西是理想的。
(有人指出我链接到了错误的文档集,因此我已删除了这些链接以防止给未来读者带来困惑)
var allUsers = await graphClient
.Users
.Request()
.Expand("memberOf")
.GetAsync();
var usersInGroup = allUsers
.Where(user => user.MemberOf.Any(memberOf => memberOf.Id.Equals(groupId, StringComparison.OrdinalIgnoreCase)))
.ToList();
我已经尝试扩展“memberOf”和“MemberOf”。
我可以通过组检索成员列表。
但是这将返回一个ID列表,因此我需要进行两个请求,而不仅仅是一个请求。
var groupMembers = await graphClient
.Groups[groupId]
.Members
.Request()
.GetAsync();
var groupMemberIds = groupMembers
.Select(groupMember => groupMember.Id)
.ToList();
var allUsers = await graphClient
.Users
.Request()
.GetAsync();
var usersInGroup = allUsers
.Where(user => groupMemberIds.Contains(user.Id))
.ToList();
如果获取属于该组的ID并过滤用户是正确的方法,那么我会跟随这种方法。理想情况下,我希望通过单个请求从服务器端检索用户对象并进行过滤。
例如:
var usersInGroup = await graphClient
.Users
.Request()
.Filter($"memberOf eq {groupId}")
.GetAsync();
显然,那个过滤器不会起作用,但类似的东西是理想的。
(有人指出我链接到了错误的文档集,因此我已删除了这些链接以防止给未来读者带来困惑)