我正在尝试使用Microsoft Graph API在Microsoft Azure Active Directory中查询组的成员。我的查询将一直有效,直到尝试过滤结果为止。由于无效的filter子句,服务会引发异常Microsoft.Graph.ServiceException
。我了解并非所有Microsoft Graph API端点都支持某些过滤器子句。我想按名称过滤Members
,最好使用in
子句。这可能吗?我尝试使用startswith
和in
过滤子句,但是都抛出相同的异常。
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();
}
答案 0 :(得分:1)
在v1.0中不支持过滤器,但是如果您使用Beta版,则只需执行以下几个步骤即可使用显示名称进行过滤。
如果在图形浏览器中选中它,则可以按照以下方式获取它。
我已经使用过的查询-
https://graph.microsoft.com/beta/groups/aba04a76-ee5e-4e43-a9d6-0d451e1e3e2d/members?$count=true&$select=id,businessPhones,displayName&$filter=displayName eq 'Andrea Simandi (CELA)'
由于使用的是SDK,因此需要使用Microsoft.Graph.Beta an,然后添加count()来通过在其中添加一致性属性来查询和修改标头。
但是请记住,Microsoft Graph中/ beta版本下的API可能会更改。不支持在生产应用程序中使用这些API。
请仔细阅读此document。