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

.NET API上传OneDrive报错:仅允许JSON Content-Type头写入

问题排查与解决

核心问题:错误的文件夹路径格式

你遇到的报错本质是因为传入的文件夹路径是完整的SharePoint URL,而Microsoft Graph API的ItemWithPath方法需要的是OneDrive/SharePoint Drive内的相对路径,不是完整的Web URL。这种错误路径会导致API误将你的请求解析为对元数据的修改(需要JSON Content-Type),而非文件内容上传。

具体修正步骤

1. 替换文件夹路径为相对路径

将控制器中的folderName从完整URL改为Drive内的相对路径:
原代码:

var folderName = "https://springernature-my.sharepoint.com/:f:/r/personal/mbu4174_springernature_com/Documents/PicScout";

修改为:

var folderName = "/Documents/PicScout";

2. 修正服务中的路径拼接逻辑

确保上传路径格式正确,避免重复斜杠:

public async Task UploadFileToOneDriveAsync(Stream fileStream, string UserId, string folderName, string fileName)
{
    // 处理路径拼接,避免重复斜杠问题
    var uploadPath = string.IsNullOrEmpty(folderName) 
        ? fileName 
        : $"{folderName.TrimEnd('/')}/{fileName.TrimStart('/')}";
    try 
    {
        await _graphClient.Users[UserId].Drive.Items["root"]
            .ItemWithPath(uploadPath)
            .Content
            .Request()
            .PutAsync<DriveItem>(fileStream);
    }
    catch(Exception ex) {
        // 添加日志便于调试,同时重新抛出异常让上层处理
        Console.WriteLine($"上传失败:{ex.Message}");
        throw;
    }
}

3. 额外注意事项

  • 权限验证:确保你的Azure AD应用已授予Files.ReadWrite.All或Sites.ReadWrite.All的应用权限(因使用ClientSecretCredential属于应用级权限),且已完成管理员同意。
  • Content-Type说明:上传文件内容时无需手动设置JSON Content-Type,Graph SDK会自动根据文件流匹配正确的类型;报错中提到的JSON要求仅针对DriveItem元数据修改请求,和文件上传无关。
  • 异常处理:原代码捕获异常后无任何处理,建议添加日志并重新抛出,便于定位问题。

内容的提问来源于stack exchange,提问作者Mahesh Borhade

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 16:03:17