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

使用Microsoft.Graph创建上传会话时uploadUrl返回null问题咨询

问题描述

我尝试创建上传会话来上传超过4MB的大文件,用Graph Explorer能成功拿到uploadUrl,但用Microsoft.Graph 5.11版本的应用调用CreateUploadSession接口成功后,返回的uploadUrl却是null。我的代码如下:

var graphClient = new GraphServiceClient(authenticationProvider);

var requestBody = new Microsoft.Graph.Drives.Item.Items.Item.CreateUploadSession.CreateUploadSessionPostRequestBody
{
};

var res = await graphClient.Drives["{myDriveId}"].Items["{myItemId}/:/testFile.pdf"].CreateUploadSession.PostAsync(requestBody);

var uploadUrl = res.UploadUrl;

请问这种创建上传会话的方法是否正确?

问题分析与修复

你的代码存在两个关键问题,导致返回的uploadUrl为null:

  • 路径格式错误
    你拼接的{myItemId}/:/testFile.pdf不符合Graph SDK的路径规范。正确的格式应该用colon语法(:/{文件路径}:)来定位目标文件,若要在指定文件夹(对应{myItemId})下创建testFile.pdf,正确路径是{myItemId}:/testFile.pdf:。

  • 请求体未正确配置
    虽然接口允许空请求体,但在Graph SDK 5.x版本中,显式指定文件信息能避免服务端返回异常数据。建议在请求体里定义Item属性:

    var requestBody = new CreateUploadSessionPostRequestBody
    {
        Item = new DriveItemUploadableProperties
        {
            Name = "testFile.pdf"
        }
    };
    

修正后的完整代码:

var graphClient = new GraphServiceClient(authenticationProvider);

var requestBody = new CreateUploadSessionPostRequestBody
{
    Item = new DriveItemUploadableProperties
    {
        Name = "testFile.pdf"
    }
};

// 使用正确的colon路径格式
var res = await graphClient.Drives["{myDriveId}"].Items["{myItemId}:/testFile.pdf:"].CreateUploadSession.PostAsync(requestBody);

var uploadUrl = res.UploadUrl; // 此时可正常获取uploadUrl

额外检查项:

  • 确认authenticationProvider已获取到包含Files.ReadWrite权限的有效令牌
  • 确保目标文件夹({myItemId})存在,且当前用户拥有该文件夹的写入权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:32:49