使用Microsoft Graph和C#连接到OneDrive不起作用。

huangapple go评论67阅读模式
英文:

Connect to OneDrive using Microsoft Graph and C# not working

问题

我试图创建一个非常简单的应用程序,用于连接到我的OneDrive并获取我在OneDrive上托管的各种文件的列表。

这是代码:

string clientId = "我的客户端ID";
string clientSecret = "秘密ID值";
string tenantId = "我的租户ID";

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

var driveItems = await graphClient.Me.Drive.Root.Children.Request().GetAsync();

// 显示列表中所有项目的名称
foreach (var item in driveItems)
{
    Console.WriteLine(item.Name);
}

问题是,显然 graphClient.Me.Drive 不包含 Root 定义(至少Visual Studio告诉我如此)。

我正在使用 Microsoft.Graph v5.11Azure.Identity v1.9

英文:

I was trying to create a very simple app to connect to my OneDrive and receive a list of the various files that I have hosted on OneDrive.

This is the code:

string clientId = "My client Id";
string clientSecret = "The secret id value";
string tenantId = "My tennant id";
      
var clientSecretCredential = new ClientSecretCredential(tenantId, clientId, clientSecret);
var graphClient = new GraphServiceClient(clientSecretCredential);

var driveItems = await graphClient.Me.Drive.Root.Children.Request().GetAsync();

// Display the names of all items in the list
foreach (var item in driveItems)
{
    Console.WriteLine(item.Name);
}

The problem is that apparently graphClient.Me.Drive does not contain a Root definition (at least that's what Visual Studio tells me).

I am using Microsoft.Graph v5.11 and Azure.Identity v1.9

答案1

得分: 1

你现在正在使用 Microsoft.Graph v5.11,与 V4.x 不同,在 V5 中没有 .Request()

同时,你正在使用客户端凭据流 new ClientSecretCredential,因此不能使用 .Me,而必须使用 .Users["your_user_id"]。因为你没有首先登录,所以必须手动提供用户 id。顺便说一下,由于你正在使用客户端凭据流,你必须将范围设置为 var scopes = new[] { "https://graph.microsoft.com/.default" };。这要求你同意 API 权限的应用程序类型

使用Microsoft Graph和C#连接到OneDrive不起作用。
使用Microsoft Graph和C#连接到OneDrive不起作用。

然后,基于 V5.11 的代码应该如下:

var scopes = new[] { "https://graph.microsoft.com/.default" };
var tenantId = "tenantId ";
var clientId = "clientId ";
var clientSecret = "clientSecret";
var clientSecretCredential = new ClientSecretCredential(
                            tenantId, clientId, clientSecret);
var graphClient = new GraphServiceClient(clientSecretCredential, scopes);
var userDriveId = await graphClient.Users["yourUserId"].Drive.GetAsync();
var driveItems = await graphClient.Drives["userDriveId"].Items["Root"].Children.GetAsync();

相关链接:https://github.com/microsoftgraph/msgraph-sdk-dotnet/blob/feature/5.0/docs/upgrade-to-v5.md#drive-item-paths

使用Microsoft Graph和C#连接到OneDrive不起作用。

英文:

You are now using Microsoft.Graph v5.11 which is different from V4.x and in V5 there's no .Request().

In the meantime, you are using client credential flow new ClientSecretCredential, so you can't use .Me but have to use .Users["your_user_id"]. Because you don't sign in first, so you have to give a user id manually. By the way, since you are using client credential flow, you have to set the scope as var scopes = new[] { "https://graph.microsoft.com/.default" };. This requires you to consent application type of api permission:

使用Microsoft Graph和C#连接到OneDrive不起作用。
使用Microsoft Graph和C#连接到OneDrive不起作用。

Then you code based on V5.11 should be like:

var scopes = new[] { "https://graph.microsoft.com/.default" };
var tenantId = "tenantId ";
var clientId = "clientId ";
var clientSecret = "clientSecret";
var clientSecretCredential = new ClientSecretCredential(
                            tenantId, clientId, clientSecret);
var graphClient = new GraphServiceClient(clientSecretCredential, scopes);
var userDriveId = await graphClient.Users["yourUserId"].Drive.GetAsync();
var driveItems = await graphClient.Drives["userDriveId"].Items["Root"].Children.GetAsync();

Related link: https://github.com/microsoftgraph/msgraph-sdk-dotnet/blob/feature/5.0/docs/upgrade-to-v5.md#drive-item-paths

使用Microsoft Graph和C#连接到OneDrive不起作用。

huangapple
  • 本文由 发表于 2023年5月24日 23:19:25
  • 转载请务必保留本文链接:https://go.coder-hub.com/76325087.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定