You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用OneDrive API获取多驱动器根目录子项时出现ObjectHandle is Invalid错误

问题

在PHP中调用OneDrive API的/me/drives接口,获取到某用户的两个personal类型驱动器列表:

(
  [0] => Microsoft\Graph\Model\Drive Object
    (
      [_propDict:protected] => Array
        (
          [createdDateTime] => 2024-04-16T17:51:30Z
          [description] => Desc1
          [id] => b!ZdXcWExgQkiKkeYEMuOZof1MA3U_rxRJsnbh9pDQY80Lv8orpc9-RLQ0Lo7FaHPN
          [lastModifiedDateTime] => 2024-04-16T17:51:30Z
          [name] => OneDrive
          [webUrl] => https://my.microsoftpersonalcontent.com/personal/???/???
          [driveType] => personal
          [createdBy] => Array
            (
              [user] => Array
                (
                  [displayName] => SharePoint App
                )
            )
          [owner] => Array
            (
              [user] => Array
                (
                  [email] => ???
                  [displayName] => ???
                )
            )
          [quota] => Array
            (
              [deleted] => 0
              [remaining] => 943174818201
              [state] => normal
              [total] => 1104880336896
              [used] => 161705518695
              [storagePlanInformation] => Array
                (
                  [upgradeAvailable] => 
                )
            )
        )
    )
  [1] => Microsoft\Graph\Model\Drive Object
    (
      [_propDict:protected] => Array
        (
          [createdDateTime] => 2024-04-16T17:51:28Z
          [description] => 
          [id] => 740141a789bd6c6a
          [lastModifiedDateTime] => 2024-04-22T22:56:29Z
          [name] => OneDrive
          [webUrl] => https://my.microsoftpersonalcontent.com/personal/???/Documents
          [driveType] => personal
          [createdBy] => Array
            (
              [user] => Array
                (
                  [displayName] => SharePoint App
                )
            )
          [lastModifiedBy] => Array
            (
              [user] => Array
                (
                  [displayName] => System Account
                )
            )
          [owner] => Array
            (
              [user] => Array
                (
                  [email] => ???
                  [displayName] => ???
                )
            )
          [quota] => Array
            (
              [deleted] => 0
              [remaining] => 943174818201
              [state] => normal
              [total] => 1104880336896
              [used] => 161705518695
              [storagePlanInformation] => Array
                (
                  [upgradeAvailable] => 
                )
            )
        )
    )
)

选择第一个驱动器,调用接口列出根目录内容:

GET https://graph.microsoft.com/v1.0/me/drives/b!ZdXcWExgQkiKkeYEMuOZof1MA3U_rxRJsnbh9pDQY80Lv8orpc9-RLQ0Lo7FaHPN/items/root/children?$top=999

返回错误:

{
    "error": {
        "code": "invalidRequest",
        "message": "ObjectHandle is Invalid",
        "innerError": {
            "date": "2024-04-23T09:48:26",
            "request-id": "7da7ea84-88ba-4bc9-a9fd-4a547eca49f1",
            "client-request-id": "7da7ea84-88ba-4bc9-a9fd-4a547eca49f1"
        }
    }
}

用户只有一个驱动器时该接口可正常工作,已尝试对驱动器ID做URL编码但无效,询问是否是根目录定义方式有问题。


解决方法

  1. 排查无效驱动器ID
    第一个驱动器ID格式为b!xxx,这是SharePoint文档库/团队站点驱动器的典型格式,而非个人OneDrive的标准短ID格式(如第二个驱动器的740141a789bd6c6a)。即使接口标记它为personal类型,该ID对应的可能是无效或无访问权限的驱动器对象,从而触发报错。

  2. 切换有效驱动器调用
    直接使用第二个驱动器ID测试接口:

    GET https://graph.microsoft.com/v1.0/me/drives/740141a789bd6c6a/items/root/children?$top=999
    

    另外,个人OneDrive可通过简化接口/me/drive/items/root/children直接访问主驱动器,无需指定ID,能避免选错无效驱动器的问题。

  3. 验证驱动器可用性
    先调用/me/drives/{drive-id}接口单独获取驱动器详情,确认返回信息正常且webUrl可访问,再尝试获取子项。若该接口仍报错,说明此驱动器ID对应的对象不可用,需在逻辑中忽略这类异常驱动器。

内容的提问来源于stack exchange,提问作者Dan Gravell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 13:29:54