按显示名称过滤组成员不起作用

Filter group members by displayName does not work

我需要提供一个允许用户搜索组内成员的端点

下面的代码在没有传入过滤器时工作正常(它是 returns 组成员),但是当传入 queryString 时我得到这个错误

Microsoft.Graph.ServiceException: 'Code: Request_UnsupportedQuery Message: The specified filter to the reference property query is currently not supported.

有什么明智的解决方法吗?

MS 声称此 属性 是可过滤的,但只能通过 url API 过滤吗?这是否意味着我正在尝试做的事情是不可能的?

似乎在他们的例子中他们总是设置 ConsistencyLevel: Eventual - 但我不知道我们如何使用 GraphServiceClient

来设置它

我尝试将其添加为 header:

var consistencyLevelHeader = new HeaderOption("consistencylevel", "eventual");
request.Headers.Add(consistencyLevelHeader);

但我得到了相同的结果

var groupId = "guid-of-the-group";

var request = _graphServiceClient.Value.Groups[groupId]
    .Members
    .Request();

if (!string.IsNullOrEmpty(queryString))
{
    request = request.Filter($"startswith(displayName,'{queryString}')");
}

var groupMembersCollection = await request
    .GetAsync();

var userDtos = groupMembersCollection.Select(member =>
    new AzureADAccountDTO
    {
        ProviderKey = member.Id,
        EmailAddress = ((User)member).Mail,
        Name = ((User)member).DisplayName,
    })
    .ToList();

return userDtos;

您需要添加 $count 查询参数以及 ConsistencyLevel header 以获得成功的响应。

请求如下所示

https://graph.microsoft.com/v1.0/groups/0023c709-3556-4296-a6ab-6df2a0a1113c/members?$count=true&$filter=startswith(displayName, 's')

您可以在 Graph Explore 中测试这些图形调用。