Microsoft Graph API筛选器组成员

时间:2020-08-25 22:10:53

标签: c# microsoft-graph-api

我正在尝试使用Microsoft Graph API在Microsoft Azure Active Directory中查询组的成员。我的查询将一直有效,直到尝试过滤结果为止。由于无效的filter子句,服务会引发异常Microsoft.Graph.ServiceException。我了解并非所有Microsoft Graph API端点都支持某些过滤器子句。我想按名称过滤Members,最好使用in子句。这可能吗?我尝试使用startswithin过滤子句,但是都抛出相同的异常。

GraphServiceClient client = GetGraphServiceClient(token);
const string graphProperties = "id,givenName,surname,userPrincipalName,jobTitle,department,officeLocation,businessPhones,mobilePhone,mail";
IGroupMembersCollectionWithReferencesRequest query = client.Groups[Settings.IntranetObjectID].Members.Request().Select(graphProperties);
if (!string.IsNullOrWhiteSpace(model.SearchText))
{
    query.Filter($"in(displayName, '{model.SearchText}'");
}
IGroupMembersCollectionWithReferencesPage members = await query.Top(PageSize).GetAsync();
model.StaffMembers = new List<StaffMember>();
while (members.Count > 0)
{
    foreach (DirectoryObject member in members)
    {
        if (member is User user)
        {
            model.StaffMembers.Add(new StaffMember(user));
        }
    }

    if (members.NextPageRequest == null)
    {
        break;
    }

    members = await members.NextPageRequest.GetAsync();
}

1 个答案:

答案 0 :(得分:1)

在v1.0中不支持过滤器,但是如果您使用Beta版,则只需执行以下几个步骤即可使用显示名称进行过滤。

  1. 选择beta端点。
  2. 在查询字符串中添加$ count = true。
  3. 将ConsistencyLevel =最终添加到Request headers

如果在图形浏览器中选中它,则可以按照以下方式获取它。

我已经使用过的查询-

https://graph.microsoft.com/beta/groups/aba04a76-ee5e-4e43-a9d6-0d451e1e3e2d/members?$count=true&$select=id,businessPhones,displayName&$filter=displayName eq 'Andrea Simandi (CELA)'

enter image description here

由于使用的是SDK,因此需要使用Microsoft.Graph.Beta an,然后添加count()来通过在其中添加一致性属性来查询和修改标头。

但是请记住,Microsoft Graph中/ beta版本下的API可能会更改。不支持在生产应用程序中使用这些API。

请仔细阅读此document