Microsoft Graph无法在/ groups的expand语句上选择

时间:2019-02-05 20:33:13

标签: microsoft-graph

我想通过Microsoft Graph访问所有组的所有成员。我想将其收集在一个电话中,而不是遍历每个组。

我只想为扩展成员选择一部分信息。

我找不到执行此操作的方法,但我相信它受到支持。在展开时进行选择的合适方法是什么?

据我所知,这应该可以满足我的需求,但是返回的结果没有members属性:

https://graph.microsoft.com/v1.0/groups?$expand=members($select=id,userPrincipalName)

但是,这确实返回了所有成员,但是提供了 way 比我正在寻找的更多信息:

 https://graph.microsoft.com/v1.0/groups?$expand=members

我已经在两个地方尝试过

  1. Microsoft Graph API explorer(上面的特定示例)。

  2. 在真实环境中的代码中。我将在这里省略代码,因为代码的结果与Graph Explorer相同。

编辑:虽然我接受了马克的回答,因为它可以帮助解决此问题,但对于其他人,我要指出的是,以下内容仍会在单个(尽管很大)的响应中返回组和成员:

 https://graph.microsoft.com/v1.0/groups?$expand=members

1 个答案:

答案 0 :(得分:2)

虽然从OData角度来看,查询的格式正确,但网上论坛并未实现此模式。您需要分别查询每个组的成员资格。

您可以 做的是减少使用JSON Batching的通话次数。您一次最多可以批量处理20个呼叫。最简单的方法是将页面大小设置为20条记录,如下所示:

https://graph.microsoft.com/v1.0/groups?$select=id&$top=20

然后,对于每个页面,发送对该页面上的组的批处理请求:

POST https://graph.microsoft.com/v1.0/$batch
{
  "requests": [
    {
      "id": "1",
      "method": "GET",
      "url": "/groups/{group-id}/members"
    },
    {
      "id": "2",
      "method": "GET",
      "url": "/groups/{group-id}/members"
    },
    //...
    {
      "id": "20",
      "method": "GET",
      "url": "/groups/{group-id}/members"
    } 
  ]
}