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

使用Microsoft Graph与C#连接OneDrive报错:graphClient.Me.Drive无Root定义

问题解决:Microsoft Graph v5中Drive.Root不存在及客户端凭据流的使用问题

核心问题分析

  1. Graph SDK v5语法变更:在Microsoft Graph SDK v5.x版本中,Drive对象不再提供Root属性。要访问OneDrive的根文件夹,需通过Items["root"]引用(根文件夹在Graph API中的固定ID为"root")。
  2. 客户端凭据流不支持Me:你使用的ClientSecretCredential属于应用权限模式(客户端凭据流),该模式下无法用Me指代当前用户——应用权限独立于用户,必须明确指定要访问的用户ID或用户主体名称(UPN)。

修正后的代码

string clientId = "My client Id";
string clientSecret = "The secret id value";
string tenantId = "My tenant id";
string targetUserId = "目标用户的ID或UPN"; // 替换为实际用户的ID或邮箱

var clientSecretCredential = new ClientSecretCredential(tenantId, clientId, clientSecret);
var graphClient = new GraphServiceClient(clientSecretCredential);

// 获取指定用户OneDrive根目录下的所有文件/文件夹
var driveItems = await graphClient.Users[targetUserId].Drive.Items["root"].Children.GetAsync();

// 遍历并输出名称
foreach (var item in driveItems.Value)
{
    Console.WriteLine(item.Name);
}

额外说明

  • 获取目标用户ID:若不知道用户ID,可先调用graphClient.Users.GetAsync()获取租户内用户列表,从中提取所需用户的ID或UPN。
  • 权限配置:确保Azure AD应用已添加Files.Read.All或Sites.Read.All等应用权限,并完成管理员同意。
  • SDK v5 API风格:v5版本移除了旧版的.Request()方法,直接通过链式调用后使用.GetAsync()发起请求,返回结果的Value属性包含实际数据列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 19:22:11