使用RestAPI上传文件至SharePoint遇403错误(.NET Core环境)
问题排查与修复方案
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
相关产品推荐
相关产品推荐

