通过Microsoft Graph访问SharePoint Excel工作簿遇资源找不到问题
你遇到的“找不到资源”或返回空集合的问题,大概率是路径解析或API调用方式的细节问题,我来帮你梳理可能的修复方案:
可能的问题点及对应解决步骤
1. 优化站点获取的路径写法
你当前用SiteWithPath拼接站点的方式,可能存在路径解析的潜在问题。可以直接使用站点的完整相对路径来获取站点对象,写法更简洁也更可靠:
// 直接传入站点的完整路径,替代原SiteWithPath的拼接逻辑 var site = await graphClient .Sites["xyz.ourserver.com/sites/site"] .Request() .GetAsync();
2. 修正子目录的路径格式
你在ItemWithPath("/subdir")中使用了开头的斜杠,这是关键错误——ItemWithPath的参数需要是相对于Drive根目录的相对路径,不需要开头的斜杠。修改后的代码如下:
var driveItems = await graphClient .Sites[site.Id] .Lists[list.Id] .Drive .Root .ItemWithPath("subdir") // 去掉开头的/,使用相对路径 .Children .Request() .GetAsync();
另外,直接调用Root.Children返回空是正常的,因为你的文件都存放在subdir子文件夹里,根目录本身没有直接的文件/文件夹。
3. 直接验证目标Excel文件的访问
你可以跳过获取子目录的步骤,直接尝试访问Test.xlsx文件,快速验证路径和权限是否正常:
var targetExcel = await graphClient .Sites[site.Id] .Lists[list.Id] .Drive .Root .ItemWithPath("subdir/Test.xlsx") .Request() .GetAsync();
如果这个请求成功,说明路径和权限都没问题,只是之前的子目录访问写法有误。
4. 确认权限配置
请检查你的Graph API身份(应用或登录用户)是否拥有Files.Read或Files.ReadWrite权限,并且权限范围覆盖了目标站点的文档库。内网SharePoint的权限可能存在继承限制,要确保当前身份确实能访问subdir和Test.xlsx。
额外说明
如果你的列表是普通业务列表(非文档库类型),那它本身没有Drive属性——但从你的描述来看,这个列表是文档库(包含文件和子目录),所以这个情况可以排除。
内容的提问来源于stack exchange,提问作者TvdH
相关产品推荐
相关产品推荐

