如何使用OneDrive API通过新版共享URL访问共享驱动器内容?
OneDrive API 共享链接访问问题解决
问题背景
此前可通过旧格式OneDrive共享链接调用API获取内容,切换为新格式共享链接后,调用API时持续报错。
旧格式成功案例
- 共享链接:
https://1drv.ms/v/**s!AhcuJaxIdVk5gV86XGmv0X2a0P30?e=QYXv92* - 调用API:
https://api.onedrive.com/v1.0/shares/{encoded_url}/root/content
新格式问题详情
- 新共享链接格式:
https://1drv.ms/v/**c/16736b8f8892fe5e/EeWQ4oZ_sZtGmTFmsnFDU3oBM7cJoyL9tapTJU7gxZznzA* - 错误操作:仅编码链接最后部分(
EeWQ4oZ_sZtGmTFmsnFDU3oBM7cJoyL9tapTJU7gxZznzA),得到Base64-url-safe编码结果RWVXUTRvWl9zWnRHbVRGbXNGRFUzb0JNOWNKb3lMOWthcFRKVTdneFp6bnpB,构造API URL:https://api.onedrive.com/v1.0/shares/u!RWVXUTRvWl9zWnRHbVRGbXNGRFUzb0JNOWNKb3lMOWthcFRKVTdneFp6bnpB/root/content - 收到错误响应:
{ "error": { "code": "invalidRequest", "message": "Bad Argument" } }
解决方法
- 编码完整共享链接:必须对完整的有效共享链接进行Base64-url-safe编码,而非仅编码链接末尾部分。
- 先处理共享链接:去掉末尾的
*,保留核心有效链接,例如:https://1drv.ms/v/c/16736b8f8892fe5e/EeWQ4oZ_sZtGmTFmsnFDU3oBM7cJoyL9tapTJU7gxZznzA
- 先处理共享链接:去掉末尾的
- 遵循Base64-url-safe编码规则:
- 对完整链接做标准Base64编码
- 替换字符:将
+替换为-,/替换为_ - 去掉编码结果末尾的所有
=
- 添加前缀并构造API URL:在编码结果前加上
u!前缀,再拼接成API请求地址:https://api.onedrive.com/v1.0/shares/u![编码后的完整链接]/root/content - 权限验证注意:若共享链接设置了访问权限,请求必须携带有效的身份凭证,否则会返回
unauthenticated错误。
内容的提问来源于stack exchange,提问作者Gerald
相关产品推荐
相关产品推荐

