使用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
相关产品推荐
相关产品推荐

