我们希望能够在集合中包含有关每个用户的个人网站(OneDrive for Business)的信息,以避免对Microsoft Graph的后续请求效率低下。
通过mySite
获取用户集时,Microsoft Graph API不允许查询/users?$select=id,mail,mySite
字段。 Graph API docs中记录了这一事实。因此,我们正在寻找替代方案,并且遇到了:
GET /users?$expand=drive
或
GET /users?$expand=drives
因为drive
对应于用户的个人驱动器,并且字段webUrl
与mySite
相同。
但请求会导致以下错误:
{
"error": {
"code": "InternalServerError",
"message": "Value cannot be null. Parameter name: source",
"innerError": {
"request-id": "15d69169-937a-4525-a904-e4107704d8f1",
"date": "2017-11-08T02:11:17"
}
}
}
这是一个有效的记录关系。此外,没有任何地方记录不支持使用$expand
查询参数。虽然有一条说明here表示$expand
目前仅由beta/users
支持,但仍会因同样的错误而失败。
错误的潜在原因可能是用户尚未创建个人网站,因此我们尝试drives
(如上所述)假设它可能只返回一个空列表以及以下内容:
GET /users?$expand=drive&$filter=drive ne null
但是这也会返回一个错误,说明Filter is not supported
。虽然$filter
不能被使用,但没有记录。仅记录here不支持$expand=drive($select=webUrl;$filter=webUrl ne null)
(如果我们理解正确的话)。
我们搜索了办公室功能建议平台Stack Overflow以及Microsoft的技术社区开发人员小组,但没有成功。
仍然存在发现API,但这不是一个真正的选项,因为我们使用仅限app的令牌。此外,如同here提到的那样,Microsoft Graph也应该替换它。
答案 0 :(得分:1)
Microsoft Graph不支持从drive
实体扩展user
。至于为什么,我会尝试解释。
要了解此行为,请将其导入以考虑给定实体的来源。在这种情况下,user
来自Active Directory,而drive
来自SharePoint。
如documentation中所述:
注意:并非所有关系和资源都支持
$expand
查询参数。例如,您可以展开用户的directReports
,manager
和memberOf
关系,但无法展开其events
,messages
或{{ 1}}关系。
仅使用示例,photo
,directReports
和manager
的所有通知均来自AD memberOf
,events
或{{1}来自Exchange的所有来源。
文档试图解释的内容(尽管是一种相当混乱和四舍五入的方式)是messages
无法跨越服务边界。如果关系从一个服务跨越到另一个服务(即Exchange和SharePoint),则Microsoft Graph无法在单个调用中跨越该边界进行导航。
部分原因在于通过Microsoft Graph提供的各种服务,这些服务具有不同的规则和约束。例如,Exchange对限制的规则与OneNote不同。在解决要应用的规则时,通过photo
在服务之间进行交叉会产生问题。
希望这会有所帮助。