You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OneDrive个人版API调用认证错误及普通链接转API格式求助

解决OneDrive个人版共享链接转API格式问题

针对你遇到的新版https://1drv.ms/u/c/类短链接转API可用格式的问题,直接按以下步骤操作:

转换步骤

  1. 解析短链接为完整共享链接
    短链接(如1drv.ms开头)需要先解析为完整的OneDrive共享链接(格式类似https://onedrive.live.com/redir?resid=XXX!XXX&authkey=!XXX&ithint=file%2Cxxx)。你可以通过代码发起HEAD请求获取跳转后的真实地址,或者手动访问短链接复制浏览器地址栏的完整链接。

  2. 编码生成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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 06:25:07