我试图为C#使用MS (beta)来获取用户所属的所有组,并使用筛选器只获取“安全组”。
我的代码如下所示:
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#代码中遗漏了什么?
发布于 2020-10-09 15:05:57
请使用下面的代码对securityEnabled中的c#使用图形sdk进行过滤
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);
}
发布于 2020-10-11 18:05:32
多亏了斯拉蒂的回答,我才能获得用户传递的会员资格。显然,这通常会导致一个庞大的列表,而Graph只会为您提供一个分页响应,因此您必须遍历每个页面才能获得所有信息。
这就是代码现在的样子:
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, eventual
或ConsistencyLevel: eventual, eventual, eventual
等等。
为了解决这个问题,我添加了小的if (!currentHeaders.Any())
块,仅在不存在ConsistencyLevel
头的情况下添加它。
希望这将帮助其他人,谁会被抓到骑自行车通过分页的反应!
https://stackoverflow.com/questions/64189818
复制相似问题