OneDrive个人版API调用认证错误及普通链接转API格式求助
解决OneDrive个人版共享链接转API格式问题
针对你遇到的新版https://1drv.ms/u/c/类短链接转API可用格式的问题,直接按以下步骤操作:
转换步骤
解析短链接为完整共享链接
短链接(如1drv.ms开头)需要先解析为完整的OneDrive共享链接(格式类似https://onedrive.live.com/redir?resid=XXX!XXX&authkey=!XXX&ithint=file%2Cxxx)。你可以通过代码发起HEAD请求获取跳转后的真实地址,或者手动访问短链接复制浏览器地址栏的完整链接。编码生成API兼容格式
对完整共享链接执行以下编码操作:- 对完整链接做URL编码
- 给编码后的字符串添加前缀
u! - 将拼接后的字符串做Base64编码,再替换Base64中的
+为-、/为_,并去掉末尾的=(URL安全Base64) - 最终API地址格式为:
https://api.onedrive.com/v1.0/shares/{URL安全Base64字符串}/root/content(用于直接获取文件内容),或/root获取文件元数据
.NET代码实现
以下是适用于.NET Framework和.NET Core的C#代码,直接复用即可:
using System; using System.Text; using System.Net.Http; using System.Threading.Tasks; public static class OneDriveLinkConverter { public static async Task<string> ConvertToApiDownloadLink(string shortShareLink) { // 解析短链接为完整共享链接 using var httpClient = new HttpClient(); var response = await httpClient.GetAsync(shortShareLink, HttpCompletionOption.ResponseHeadersRead); string fullShareLink = response.RequestMessage.RequestUri.ToString(); // URL编码完整链接 string encodedUrl = Uri.EscapeDataString(fullShareLink); // 添加u!前缀 string prefixedUrl = "u!" + encodedUrl; // Base64编码并转为URL安全格式 byte[] bytes = Encoding.UTF8.GetBytes(prefixedUrl); string base64 = Convert.ToBase64String(bytes); string urlSafeBase64 = base64.Replace('+', '-').Replace('/', '_').TrimEnd('='); // 返回API下载地址 return $"https://api.onedrive.com/v1.0/shares/{urlSafeBase64}/root/content"; } }
注意事项
- 确保共享链接设置为任何人可下载的公开权限,否则API调用会触发认证错误
- 若仍出现认证问题,检查是否微软调整了个人版API的匿名访问规则,此时可考虑将文件设置为公开共享后再测试
- 短链接解析步骤不可省略,直接编码短链接无法被OneDrive API识别
内容的提问来源于stack exchange,提问作者David BS
相关产品推荐
相关产品推荐

