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

使用Graph API SDK(C#)获取SharePoint嵌套文件夹遇invalidRequest错误的解决

问题原因分析

你的请求失败主要有三个核心问题:

  • 站点标识符错误:site.sharepoint.com不是Graph API认可的站点ID格式,需要使用站点的唯一ID(如{tenant}.sharepoint.com,{site-guid})或者站点的相对路径(如/sites/{site-name})。
  • Drive概念混淆:Drives["2022"]中的2022是文件夹名称,但Drive指的是SharePoint的文档库,不是普通文件夹。你的2022是站点根文档库下的子文件夹,不能通过Drives集合直接访问。
  • 嵌套文件夹访问方式错误:Children["October"]这种通过名称索引Children集合的方式不被支持,Children返回的是项目列表,无法直接通过名称定位。
正确的实现方式

方式一:通过路径直接定位(推荐)

利用ItemWithPath方法直接传入完整的文件夹路径,一步到位获取目标文件夹:

// 替换为你的站点相对路径或站点ID
var siteIdentifier = "/sites/你的站点名称"; 
var targetFolder = await graphClient
    .Sites[siteIdentifier]
    .Drive
    .Root
    .ItemWithPath("2022/October/25")
    .Request()
    .GetAsync();

方式二:逐层获取文件夹(适合需要中间步骤的场景)

如果需要逐层验证或处理中间文件夹,可以通过筛选名称的方式逐层获取:

var siteIdentifier = "/sites/你的站点名称";

// 获取站点根文档库
var rootDrive = await graphClient.Sites[siteIdentifier].Drive.Request().GetAsync();

// 获取2022文件夹
var folder2022 = await graphClient
    .Sites[siteIdentifier]
    .Drive
    .Root
    .Children
    .Request()
    .Filter("name eq '2022' and folder ne null")
    .GetAsync()
    .ContinueWith(t => t.Result.FirstOrDefault());

// 获取October文件夹
var folderOctober = await graphClient
    .Sites[siteIdentifier]
    .Drive
    .Items[folder2022.Id]
    .Children
    .Request()
    .Filter("name eq 'October' and folder ne null")
    .GetAsync()
    .ContinueWith(t => t.Result.FirstOrDefault());

// 获取25文件夹
var folder25 = await graphClient
    .Sites[siteIdentifier]
    .Drive
    .Items[folderOctober.Id]
    .Children
    .Request()
    .Filter("name eq '25' and folder ne null")
    .GetAsync()
    .ContinueWith(t => t.Result.FirstOrDefault());
额外注意事项
  • 确保你的应用拥有Files.Read或Files.ReadWrite的权限(根据需求选择)。
  • 如果使用站点ID,可以通过Graph Explorer先查询站点列表获取正确的ID值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:20:43