首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Graph过滤用户的传递组成员

使用Graph过滤用户的传递组成员
EN

Stack Overflow用户
提问于 2020-10-03 23:17:42
回答 2查看 853关注 0票数 0

我试图为C#使用MS (beta)来获取用户所属的所有组,并使用筛选器只获取“安全组”。

我的代码如下所示:

代码语言:javascript
运行
复制
var upn = "some.body@org.com";
 
var request = await _graphClient.Users[upn].TransitiveMemberOf
    .Request()
    .Filter("securityEnabled eq true")
    .GetAsync();

当我运行这段代码时,我会得到一个错误,即The specified filter to the reference property query is currently not supported。我知道同一个API端点可以使用具有相同过滤器的Postman成功地调用,所以我假设我在C#代码中遗漏了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-09 15:05:57

请使用下面的代码对securityEnabled中的c#使用图形sdk进行过滤

代码语言:javascript
运行
复制
try
        {
            

            List<Option> requestOptions = new List<Option>();

            requestOptions.Add(new QueryOption("$count", "true"));

        

            var request = await graphClient.Users["sruthi@xx.live"].TransitiveMemberOf
                .Request(requestOptions).Header("ConsistencyLevel", "eventual")
                .Filter("securityEnabled eq true")
                .GetAsync();

            Console.WriteLine(JsonConvert.SerializeObject(request));
        }
        catch(Exception e)
        {
            Console.WriteLine(e.Message);
        }
票数 2
EN

Stack Overflow用户

发布于 2020-10-11 18:05:32

多亏了斯拉蒂的回答,我才能获得用户传递的会员资格。显然,这通常会导致一个庞大的列表,而Graph只会为您提供一个分页响应,因此您必须遍历每个页面才能获得所有信息。

这就是代码现在的样子:

代码语言:javascript
运行
复制
public async Task<List<Group>> ListTransitiveGroupMembershipsOfUserAsync(string upn)
        {
            var requestOptions = new List<Option>
            {
                new QueryOption("$count", "true")
            };

            var directoryObjects = new List<DirectoryObject>();

            var request = await _graphClient.Users[upn].TransitiveMemberOf
                .Request(requestOptions).Header("ConsistencyLevel", "eventual")
                .Filter("securityEnabled eq true")
                .GetAsync();

            directoryObjects.AddRange(request.CurrentPage);

            while (request.NextPageRequest != null)
            {
                var currentHeaders = request.NextPageRequest.Headers;
                IUserTransitiveMemberOfCollectionWithReferencesPage newPage;

                if (!currentHeaders.Any())
                    request = await request.NextPageRequest.Header("ConsistencyLevel", "eventual").GetAsync();
                else
                    request = await request.NextPageRequest.GetAsync();

                directoryObjects.AddRange(request.CurrentPage);
            }

            return directoryObjects.Cast<Group>().ToList();
        }

最初,我的代码在试图获得第2页的结果时失败了,因为它一直将eventual附加到ConsistencyLevel头。因此,当为第2页发送HTTP请求时,标题类似于:第3页的ConsistencyLevel: eventual, eventualConsistencyLevel: eventual, eventual, eventual等等。

为了解决这个问题,我添加了小的if (!currentHeaders.Any())块,仅在不存在ConsistencyLevel头的情况下添加它。

希望这将帮助其他人,谁会被抓到骑自行车通过分页的反应!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64189818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档