users?$expand=drive 因 InternalServerError 而失败
users?$expand=drive fails with InternalServerError
我们希望能够在集合中包含有关每个用户的个人网站 (OneDrive for Business) 的信息,以避免对 Microsoft Graph 的后续请求效率低下。
Microsoft Graph API 在通过 /users?$select=id,mail,mySite
获取用户集合时不允许查询 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
(如上所述)假设它可能只是 return 一个空列表以及以下内容:
GET /users?$expand=drive&$filter=drive ne null
但这也是 return 一个错误,指出 Filter is not supported
。虽然 $filter
不能像没有记录那样使用。只有 $expand=drive($select=webUrl;$filter=webUrl ne null)
不支持 here(如果我们理解正确的话)。
我们在office功能建议平台、Stack Overflow、微软的技术社区开发者群中搜索,均无果。
仍有发现 API 但这并不是一个真正的选择,因为我们使用的是仅应用程序令牌。此外,Microsoft Graph 是否也应该取代它,如前所述 here.
Microsoft Graph 不支持从 user
实体扩展 drive
。至于为什么,我会尝试解释。
要了解此行为,需要考虑给定实体的来源。在这种情况下,user
来自 Active Directory,而 drive
来自 SharePoint。
如 documentation 中所述:
Note: Not all relationships and resources support the $expand
query parameter. For example, you can expand the directReports
, manager
, and memberOf
relationships on a user, but you cannot expand its events
, messages
, or photo
relationships.
仅使用示例,请注意 directReports
、manager
和 memberOf
均来自 AD,而 events
、messages
或 photo
均来自 Exchange。
文档试图解释的(尽管是以一种相当混乱和迂回的方式)是 $expand
不能跨越服务边界。如果关系从一项服务跨越到另一项服务(即 Exchange 和 SharePoint),Microsoft Graph 无法在单个调用中跨越该边界导航。
部分原因是通过具有不同规则和约束的 Microsoft Graph 提供的各种服务。例如,Exchange 的限制规则与 OneNote 不同。通过 $expand
在服务之间交叉会在解决要应用哪些规则时出现问题。
希望这对您有所帮助。
我们希望能够在集合中包含有关每个用户的个人网站 (OneDrive for Business) 的信息,以避免对 Microsoft Graph 的后续请求效率低下。
Microsoft Graph API 在通过 /users?$select=id,mail,mySite
获取用户集合时不允许查询 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
(如上所述)假设它可能只是 return 一个空列表以及以下内容:
GET /users?$expand=drive&$filter=drive ne null
但这也是 return 一个错误,指出 Filter is not supported
。虽然 $filter
不能像没有记录那样使用。只有 $expand=drive($select=webUrl;$filter=webUrl ne null)
不支持 here(如果我们理解正确的话)。
我们在office功能建议平台、Stack Overflow、微软的技术社区开发者群中搜索,均无果。
仍有发现 API 但这并不是一个真正的选择,因为我们使用的是仅应用程序令牌。此外,Microsoft Graph 是否也应该取代它,如前所述 here.
Microsoft Graph 不支持从 user
实体扩展 drive
。至于为什么,我会尝试解释。
要了解此行为,需要考虑给定实体的来源。在这种情况下,user
来自 Active Directory,而 drive
来自 SharePoint。
如 documentation 中所述:
Note: Not all relationships and resources support the
$expand
query parameter. For example, you can expand thedirectReports
,manager
, andmemberOf
relationships on a user, but you cannot expand itsevents
,messages
, orphoto
relationships.
仅使用示例,请注意 directReports
、manager
和 memberOf
均来自 AD,而 events
、messages
或 photo
均来自 Exchange。
文档试图解释的(尽管是以一种相当混乱和迂回的方式)是 $expand
不能跨越服务边界。如果关系从一项服务跨越到另一项服务(即 Exchange 和 SharePoint),Microsoft Graph 无法在单个调用中跨越该边界导航。
部分原因是通过具有不同规则和约束的 Microsoft Graph 提供的各种服务。例如,Exchange 的限制规则与 OneNote 不同。通过 $expand
在服务之间交叉会在解决要应用哪些规则时出现问题。
希望这对您有所帮助。