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

使用Microsoft Graph 5.x.x上传SharePoint文件报错:DriveItemRequestBuilder无Root定义

SharePoint站点共享文件夹文件上传编译错误(Microsoft Graph 5.x)

我尝试用以下代码将文件上传到SharePoint站点的共享文件夹:

var uploadSession = await _graphClient.Sites[siteId]
   .Drives[driveId]
   .Root
   .ItemWithPath($"{folderPath}{info.Name}")
   .CreateUploadSession()
   .Request()
   .PostAsync();

出现编译错误:

'DriveItemRequestBuilder' 不包含 'Root' 的定义,也找不到可接受第一个参数为 'DriveItemRequestBuilder' 类型的可访问扩展方法 'Root'(是否缺少 using 指令或程序集引用?)

我试过用.Items["root"]替代.Root,还是报相同错误。

问题分析

  • 这是Microsoft.Graph NuGet包的破坏性变更导致的,4.x.x版本能正常编译,但我因为其他代码需求必须使用5.x.x版本。
  • 发现存在两个不同的DriveItemRequestBuilder类:
    • 位于Microsoft.Graph.Drives.Item.DriveItemRequestBuilder命名空间,适用于个人文件夹场景(比如var uploadSession = await _graphClient.Drives[myDrive?.Id]);
    • 位于Microsoft.Graph.Sites.Item.Drives.Item.DriveItemRequestBuilder命名空间,适用于站点场景(也就是我使用的_graphClient.Sites[siteId].Drive...)。

目前找到的示例要么是旧版本的,要么是针对个人文件夹的,求解决办法。


解决方案(Microsoft Graph 5.x适配)

在Graph SDK 5.x版本中,站点关联Drive的API结构做了调整,不再需要通过.Root或.Items["root"]来定位根目录,直接通过.ItemWithPath指定完整路径即可。正确代码如下:

var uploadSession = await _graphClient.Sites[siteId]
    .Drives[driveId]
    .ItemWithPath($"{folderPath}{info.Name}")
    .CreateUploadSession()
    .PostAsync();

注意事项

  • 确保folderPath格式正确:比如站点共享文件夹的路径应为Shared Documents/目标子文件夹/这类格式,结尾的斜杠可以根据实际情况调整;
  • 如果需要单独获取根目录的DriveItem,也可以用ItemWithPath("")或ItemWithPath("/")来定位,不过直接指定完整文件路径更高效;
  • 5.x版本中移除了.Request()方法,直接调用.PostAsync()即可发起请求,这也是和旧版本的一个重要区别。

内容的提问来源于stack exchange,提问作者g.pickardou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 08:58:26