用户?$ expand =驱动器因InternalServerError

时间:2017-11-08 23:11:15

标签: microsoft-graph onedrive

我们希望能够在集合中包含有关每个用户的个人网站(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对应于用户的个人驱动器,并且字段webUrlmySite相同。

但请求会导致以下错误:

{
    "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也应该替换它。

1 个答案:

答案 0 :(得分:1)

Microsoft Graph不支持从drive实体扩展user。至于为什么,我会尝试解释。

要了解此行为,请将其导入以考虑给定实体的来源。在这种情况下,user来自Active Directory,而drive来自SharePoint。

documentation中所述:

  

注意:并非所有关系和资源都支持$expand查询参数。例如,您可以展开用户的directReportsmanagermemberOf关系,但无法展开其eventsmessages或{{ 1}}关系。

仅使用示例,photodirectReportsmanager的所有通知均来自AD memberOfevents或{{1}来自Exchange的所有来源。

文档试图解释的内容(尽管是一种相当混乱和四舍五入的方式)是messages无法跨越服务边界。如果关系从一个服务跨越到另一个服务(即Exchange和SharePoint),则Microsoft Graph无法在单个调用中跨越该边界进行导航。

部分原因在于通过Microsoft Graph提供的各种服务,这些服务具有不同的规则和约束。例如,Exchange对限制的规则与OneNote不同。在解决要应用的规则时,通过photo在服务之间进行交叉会产生问题。

希望这会有所帮助。