C# MVC5如何迭代azure active directory用户组

C# MVC5如何迭代azure active directory用户组,c#,asp.net-mvc,asp.net-mvc-5,azure-active-directory,C#,Asp.net Mvc,Asp.net Mvc 5,Azure Active Directory,我已经通过使用从AAD获得了我想要的组 ActiveDirectoryClient activeDirectoryClient = new ActiveDirectoryClient(serviceRoot, async () => await GetTokenForApplication()); // use the token for querying the graph to get the user details v

我已经通过使用从AAD获得了我想要的组

ActiveDirectoryClient activeDirectoryClient = new ActiveDirectoryClient(serviceRoot,
              async () => await GetTokenForApplication());

        // use the token for querying the graph to get the user details

        var result = await activeDirectoryClient.Groups.Where(u => u.DisplayName.Equals("myGroupName")).ExecuteAsync();
但我不知道如何遍历我得到的组并将该组中的所有用户添加到列表中。

执行以下操作:

List<IGroup> groups = result.CurrentPage.ToList();
foreach (IGroup group in groups)
{
    // do whatever you need to
}
List groups=result.CurrentPage.ToList();
foreach(组中的IGroup组)
{
//做你需要做的一切
}
编辑


IGroup是否具有和属性,允许我获取该组中的用户(如成员)

是的,但您需要明确要求对其进行扩展。以下是如何获取组的所有用户:

var groups = await activeDirectoryClient.Groups
    .Where(g => g.DisplayName == groupName).Expand(g => g.Members)
    .ExecuteAsync();

var usersForGroup = new List<User>();
foreach(IGroup thisGroup in groups)
{
    do
    {
        var thisGroupUsers = 
            thisGroup.Members.CurrentPage.Select(m => m as User)).Where(u => u != null);
        allUsers.AddRange(thisGroupUsers);

        // get next page asynchronously
        await thisGroup.Members.GetNextPageAsync();
    } while(thisGroup.Members.MorePagesAvailable)

}
var groups=等待activeDirectoryClient.groups
.Where(g=>g.DisplayName==groupName)。展开(g=>g.Members)
.ExecuteAsync();
var usersForGroup=new List();
foreach(将此组分组)
{
做
{
var thisGroupUsers=
thisGroup.Members.CurrentPage.Select(m=>m as User))。其中(u=>u!=null);
allUsers.AddRange(thisGroupUsers);
//异步获取下一页
等待thisGroup.Members.GetNextPageAsync();
}while(thisGroup.Members.morepagesavaailable)
}

当您拥有组的对象ID时,您可以在graph API中使用此URL获取直接成员:

https://graph.windows.net/myorganization/groups/{object_id}/$links/members?api版本

您在代码中获得的
IGroup
结果(例如使用
result.First()
)确实包含
Members
属性,您可以使用该属性在成员之间循环

您可以使用
IGroupFetcher
检索组成员:

var group = await adClient.Groups.Where(g => g.ObjectId == groupObjectId).ExecuteSingleAsync();
IGroupFetcher groupfetcher = (Group)group;
var membersResult = await groupfetcher.Members.ExecuteAsync();

var more = true;
while (more)
{
    foreach (var member in membersResult.CurrentPage) 
    {
    //... remember to handle that members can be other groups
    }
    if (!membersResult.MorePagesAvailable)
    {
        more = false;
    }
    else
    {
        // get next page in results
        membersResult = await membersResult.GetNextPageAsync();
    }
}

什么意思?结果的类型是什么?这不是某种类型的集合吗?我将创建一个用户类,表示从ActiveDirectoryClient返回的结果,然后将其映射到结果集,如。List users=wait activeDirectoryClient.Groups.Where(u=>u.DisplayName.Equals(“myGroupName”)).ExecuteAsync();然后遍历列表。foreach(User result in users){//do somethine here}@Waragi不起作用,因为result返回一个IGroup类型,而它只是一个组,所以您无法将其映射到用户type@CodingYoshi类型是IGroup,我想进入该组,遍历该组中的所有用户,这将如何工作?组中只有一个项目是我查询的组。IGroup没有任何属性允许我进入组内查看组内的用户。您尝试了代码吗?虽然查询了一个组,但使用了
Where
,这可能会返回多个组。如果只有一个,循环将只运行一次。如果您确定它应该只返回一个,那么请更改您的查询并使用
First
或使用
FirstOrDefault
IGroup是否具有和属性,允许我获取该组中的用户,例如@RasmusW下面提到的
成员。因为现在代码返回
Members=0
,尽管所有其他属性都正确显示,例如
displayName
objectId
,感谢您的编辑,它仍然有效。但是,它只提供组的第一页上的用户。我尝试使用
while(groups!=null){groups=await groups.GetNextPageAsync()}
但是它没有进入下一页/用户列表,你能帮我解决这个问题吗。因为现在expand方法只获得组的前20个成员,但我有更多的方法,我想得到所有的成员,有没有办法做到这一点?我曾考虑使用
GetNextPageAsync()
,但我似乎无法将其放在任何地方,因为member属性返回0个成员,但其他属性仍然正确,例如objectId和displayName