我有一个用户/组的目标列表,我想解决它们以显示名称和个人资料照片。我不想对每个objectid单独请求,而是将它们分批并在一个响应中获得所有结果。有没有可用的API?从我所做的搜索中,我找不到那样的东西。如果这样的API不存在,是否有任何提示可以提高效率?
谢谢, 波阿斯
答案 0 :(得分:3)
这是我们即将添加的功能(一个名为getById的新操作),它允许您指定最多1000个从Microsoft Graph获取的对象(尽管现在仅限于目录对象)。这类似于Azure AD Graph https://msdn.microsoft.com/en-us/library/azure/ad/graph/api/functions-and-actions#getObjectsByObjectIds当前支持的功能。
当此新操作可用时,将更新此线程。
希望这有帮助,
答案 1 :(得分:1)
我认为不可能。
似乎$ filter查询参数不喜欢"或"过滤id。
时的表达式例如:https://graph.microsoft.com/beta/users/?$filter=(usageLocation eq 'US') and (city eq 'Redmond')
工作正常。
但是当id属性被添加到这样的表达式时:https://graph.microsoft.com/beta/users/?$filter=(usageLocation eq 'US') and (city eq 'Redmond') or (id eq 'f19096bf-a58c-46ba-9ffd-0344f1daecf8')
然后它以Unsupported or invalid query filter clause specified for property 'id' of resource 'User'
失败。
如果您可以在要检索的对象之间找到一些共同点,则可以批量获取它们。
答案 2 :(得分:1)
也许Dan忘记了线程。有效地,getById是必经之路。
这是我为用户获取所有群组的方式:
var groupIds = new List<string>();
var groups = awai client.Users[userId].GetMemberGroups(false).Request().PostAsync();
groupIds.AddRange(groups);
while(groups.NextPageRequest != null)
{
groups = await groups.NextPageRequest.PostAsync();
groupIds.AddRange(groups);
}
var groupNames = new List<string>();
var groupQuery = await client.DirectoryObjects.GetByIds(groupIds,new[] { "group" }).Request().Select("DisplayName").PostAsync();
foreach (Group group in groupQuery)
{
groupNames.Add(group.DisplayName);
}
while (groupQuery.NextPageRequest != null)
{
groupQuery = await groupQuery.NextPageRequest.PostAsync();
foreach (Group group in groupQuery)
{
groupNames.Add(group.DisplayName);
}
}