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

使用RestAPI上传文件至SharePoint遇403错误(.NET Core环境)

解决.NET Core通过REST API上传SharePoint文件报403 Forbidden的问题

问题排查与修复方案

1. Access Token权限不足

  • 确保获取access token时请求的权限范围包含Files.ReadWrite.All或Sites.ReadWrite.All(优先选择最小必要权限)。
  • 可通过JWT解析工具查看token的claims,确认权限是否正确配置。

2. 请求路径不匹配

  • 你的hostWeb是https://xxx.sharepoint.com/sites/xxxProjects,但GetFolderByServerRelativeUrl参数里的站点路径写的是/sites/xxx/...,与hostWeb的站点名称不一致,需修正为/sites/xxxProjects/Shared%20Documents/Folder1。
  • 修正后的请求URL示例:
    hostWeb + "/_api/web/GetFolderByServerRelativeUrl('/sites/xxxProjects/Shared%20Documents/Folder1')/Files/add(url='4.txt',overwrite=true)"
    

3. Content-Type设置错误

  • 上传二进制文件时,ContentType不应设为application/json,需根据文件类型调整,比如文本文件用text/plain,通用二进制文件用application/octet-stream。
  • 修正代码:
    endpointRequest.ContentType = "application/octet-stream";
    

4. 请求流处理不规范

  • 使用using语句自动释放请求流,避免资源泄漏,同时确保文件内容完整写入:
    using (var requestStream = endpointRequest.GetRequestStream())
    {
        requestStream.Write(bytefile, 0, bytefile.Length);
    }
    

5. 账号文件夹权限缺失

  • 确认当前账号对目标SharePoint文件夹拥有编辑权限,即使token权限配置正确,账号本身的文件夹权限也不能缺少。

完整修正代码示例

byte[] bytefile = System.IO.File.ReadAllBytes("D:/4.txt");
string hostWeb = "https://xxx.sharepoint.com/sites/xxxProjects";
string requestUrl = hostWeb + "/_api/web/GetFolderByServerRelativeUrl('/sites/xxxProjects/Shared%20Documents/Folder1')/Files/add(url='4.txt',overwrite=true)";
HttpWebRequest endpointRequest = (HttpWebRequest)HttpWebRequest.Create(requestUrl);
endpointRequest.Method = "POST";
endpointRequest.ContentType = "application/octet-stream";
endpointRequest.Headers.Add("Authorization", "Bearer " + accessToken);

using (var requestStream = endpointRequest.GetRequestStream())
{
    requestStream.Write(bytefile, 0, bytefile.Length);
}

try
{
    HttpWebResponse endpointresponse = (HttpWebResponse)endpointRequest.GetResponse();
    // 处理上传成功后的响应逻辑
}
catch (System.Net.WebException ex)
{
    // 捕获异常并读取详细错误信息
    using (var errorResponse = (HttpWebResponse)ex.Response)
    {
        using (var reader = new System.IO.StreamReader(errorResponse.GetResponseStream()))
        {
            string errorDetail = reader.ReadToEnd();
            System.Console.WriteLine(errorDetail);
        }
    }
}

额外排查技巧

  • 捕获WebException后读取响应内容,SharePoint通常会返回具体的错误描述,帮助快速定位问题。

内容的提问来源于stack exchange,提问作者Mitesh Machhi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:30:47