【问题标题】:Microsoft.Graph get all users of a groupMicrosoft.Graph 获取组的所有用户
【发布时间】:2017-09-19 11:48:10
【问题描述】:

我正在使用 Microsoft.Graph,我想返回特定组中所有用户的列表。我找不到任何可理解的信息。

我尝试过使用.Request().Expand(x => x.Members),但这只会返回 20 个用户。而且它们没有被分页(参见here)。

我可以很好地提取组列表,但是如何根据用户所在的组过滤用户?这就是我到目前为止所得到的......

public async Task Do()
{
    var graphClient = new GraphServiceClient(_authProvider);
    var groups = await graphClient.Groups.Request().GetAsync();

    do
    {
        foreach (var group in groups)
        {
            Console.WriteLine($"{group.Id}, {group.DisplayName}");
            Console.WriteLine("------");

            var filter = $""; // What goes here?
            var users = await graphClient.Users.Request().Filter(filter).GetAsync();

            do
            {
                foreach (var user in users)
                {
                    Console.WriteLine($"{user.Id}, {user.GivenName} {user.Surname}, {user.MemberOf}");
                }
            }
            while (users.NextPageRequest != null && (users = await users.NextPageRequest.GetAsync()).Count > 0);

            Console.WriteLine();
        }
    }
    while (groups.NextPageRequest != null && (groups = await groups.NextPageRequest.GetAsync()).Count > 0);
}

【问题讨论】:

    标签: c# microsoft-graph-api


    【解决方案1】:

    类似这样的方法

    public async Task Do()
    {
        var graphClient = new GraphServiceClient(_authProvider);
    
        var groups = await graphClient.Groups.Request().GetAsync();
    
        do
        {
            foreach (var group in groups)
            {
                Console.WriteLine($"{group.Id}, {group.DisplayName}");
                Console.WriteLine("------");
    
                var users = await graphClient.Groups[group.Id].Members.Request().GetAsync();
    
                do
                {
                    foreach (var user in users)
                    {
                        Console.WriteLine($"{user.Id}");
                    }
                }
                while (users.NextPageRequest != null && (users = await users.NextPageRequest.GetAsync()).Count > 0);
    
                Console.WriteLine("------");
                Console.WriteLine();
            }
        }
        while (groups.NextPageRequest != null && (groups = await groups.NextPageRequest.GetAsync()).Count > 0);
    }
    

    【讨论】:

    • 我们如何获取用户属性?喜欢用户 PrincipalName 和 DisplayName?
    • @learntogrow-growtolearn 我刚刚遇到了同样的问题,并且能够通过将用户安全地转换为 Microsoft.Graph.User 来提取 DisplayName。确保安全投射,因为并非所有成员都是用户! :)
    【解决方案2】:

    我就是这样做的:

    var queryOptions = new List<QueryOption>();
    queryOptions.Add(new QueryOption("$count", "true"));
    
    var groupMembers = await graphClient
    .Groups[$"{groupId}"]`
    .Members
    .Request(queryOptions)
    .Header("ConsistencyLevel", "eventual")
    .GetAsync();
    
    var User = new Microsoft.Graph.User();
    
    List<User> users = new List<User>();
    users.AddRange(groupMembers.CurrentPage.OfType<User>());
    while (groupMembers.NextPageRequest != null)
    {
    groupMembers = await groupMembers.NextPageRequest.GetAsync();
    users.AddRange(groupMembers.CurrentPage.OfType<User>());
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-05
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多