使用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编码但无效,询问是否是根目录定义方式有问题。
解决方法
排查无效驱动器ID
第一个驱动器ID格式为b!xxx,这是SharePoint文档库/团队站点驱动器的典型格式,而非个人OneDrive的标准短ID格式(如第二个驱动器的740141a789bd6c6a)。即使接口标记它为personal类型,该ID对应的可能是无效或无访问权限的驱动器对象,从而触发报错。切换有效驱动器调用
直接使用第二个驱动器ID测试接口:GET https://graph.microsoft.com/v1.0/me/drives/740141a789bd6c6a/items/root/children?$top=999另外,个人OneDrive可通过简化接口
/me/drive/items/root/children直接访问主驱动器,无需指定ID,能避免选错无效驱动器的问题。验证驱动器可用性
先调用/me/drives/{drive-id}接口单独获取驱动器详情,确认返回信息正常且webUrl可访问,再尝试获取子项。若该接口仍报错,说明此驱动器ID对应的对象不可用,需在逻辑中忽略这类异常驱动器。
内容的提问来源于stack exchange,提问作者Dan Gravell
相关产品推荐
相关产品推荐

