通过objectids获取多个用户/组

时间:2016-12-20 06:16:51

标签: microsoft-graph

我有一个用户/组的目标列表,我想解决它们以显示名称和个人资料照片。我不想对每个objectid单独请求,而是将它们分批并在一个响应中获得所有结果。有没有可用的API?从我所做的搜索中,我找不到那样的东西。如果这样的API不存在,是否有任何提示可以提高效率?

谢谢, 波阿斯

3 个答案:

答案 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);
    }
}