使用Microsoft Graph REST API访问OneDrive共享文件夹子项遇404错误
我之前做OneDrive集成的时候也踩过这个坑,咱们一步步来排查解决:
最可能的原因:用错了ID!
从GET /me/drive/sharedWithMe返回的条目,本质上是你自己OneDrive里的共享“占位符”,而不是实际的共享文件夹本身。你需要从返回项的remoteItem属性里取真实的ID:
- 实际共享文件夹所在的Drive ID:
item.remoteItem.driveId - 实际共享文件夹的ID:
item.remoteItem.id
举个例子,假设sharedWithMe返回的结构是这样的:
{ "id": "user-drive-shared-placeholder-id", // 这个是你自己Drive里的占位符ID,不能用来查子项 "remoteItem": { "id": "actual-shared-folder-id", // 这个才是真实的文件夹ID "driveId": "owner-drive-id", // 文件夹所属的Drive ID "folder": { "childCount": 5 } } }
你应该用owner-drive-id和actual-shared-folder-id来构建请求:
GET https://graph.microsoft.com/v1.0/drives/owner-drive-id/items/actual-shared-folder-id/children
如果误用了user-drive-shared-placeholder-id,肯定会返回404,因为这个占位符不是真正的文件夹,没有子项。
第二步:检查权限是否足够
访问他人共享的文件夹子项,需要比基础权限更高的范围:
- 确保你的应用在Azure AD中注册时,添加了委托权限的
Files.Read.All或者Files.ReadWrite.All(注意:应用权限无法访问sharedWithMe的内容,必须用委托权限) - 解码你的访问Token(可以用jwt.ms工具),确认
scp字段里包含对应的权限(比如Files.Read.All)
其他排查点
- 确认共享文件夹没有被删除或撤销权限:如果对方已经取消共享,
sharedWithMe可能还会返回缓存的条目,但实际访问会失败 - 用Graph Explorer测试:先调用
/me/drive/sharedWithMe拿到正确的remoteItem信息,再手动调用子项接口,验证是否能成功。如果Explorer能成功,那问题大概率出在你的代码里(比如ID取错了) - 检查API版本:确保用的是
v1.0,beta版本可能有兼容性问题
内容的提问来源于stack exchange,提问作者Jack Hunsinger
相关产品推荐
相关产品推荐

