我正在尝试使用用于C#的MS Graph SDK(测试版)来通过过滤器传递用户所属的所有组,以仅获取“安全组”。
我的代码如下:
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
。我知道可以使用具有相同过滤器的Postman来成功调用相同的API端点 ,所以我认为我的C#代码中缺少某些内容吗?
答案 0 :(得分:1)
请使用下面的代码使用图形sdk过滤c#中的securityEnabled
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);
}
答案 1 :(得分:0)
由于Sruthi的回答,我得以获得用户可传递的会员资格。显然,这通常会导致列表庞大,并且Graph API仅会为您提供分页的响应,因此您必须循环浏览每个页面才能获得所有内容。
这是现在的代码:
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
标头(如果尚不存在)。
希望这会帮助其他任何人都可以通过分页的响应循环而陷入困境!