如何使用Microsoft Graph API获取OneDrive文件ID及BadRequest错误解决
问题分析与解决方案
我来帮你解决这个问题,先拆解下错误原因,再给出正确的操作步骤:
错误根源
你收到的"Empty Payload. JSON content expected."错误,主要有两个原因:
- HTTP请求方法用错了:你可能误用了POST/PUT这类需要提交JSON请求体的方法,而实际上查询文件元数据应该用GET请求,GET不需要发送任何payload。
- 路径空格未编码:OneDrive路径中的空格必须做URL编码(替换为
%20),否则API无法正确解析路径。
正确获取文件ID的步骤
1. 使用GET请求方法
一定要用GET请求发起查询,这是获取文件元数据的标准方法,不需要附带任何JSON请求体。
2. 修正URL的路径编码
把原路径中的空格替换为%20,修正后的请求URL如下:
https://graph.microsoft.com/v1.0/me/drive/root:/Folder1/SubFolder2/SubFolder%202a/TestFile.xlsx
3. 完整请求示例
- 请求方法:GET
- 请求URL:
https://graph.microsoft.com/v1.0/me/drive/root:/Folder1/SubFolder2/SubFolder%202a/TestFile.xlsx - 必填请求头:
Authorization: Bearer {你的访问令牌}(令牌需要具备Files.Read或Files.ReadWrite权限)
4. 提取文件ID
成功请求后,响应的JSON数据里的id字段就是你需要的文件ID。示例响应如下:
{ "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('user-id')/drive/root/$entity", "id": "01XYZABC123DEF456GHI789JKL012MNO345", "name": "TestFile.xlsx", "file": { "mimeType": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "hashes": { "quickXorHash": "abc123def456" } } }
额外排查建议
如果还是遇到问题,可以检查:
- 访问令牌的权限是否足够:确保令牌包含
Files.Read或更高权限(可以通过解码令牌查看权限范围) - 路径拼写是否完全正确:确认文件夹、文件名的大小写、层级和OneDrive中的实际存储完全一致
内容的提问来源于stack exchange,提问作者user16252006
相关产品推荐
相关产品推荐

