використовувати API OneDrive без втручання користувача, наприклад пакетну програму (версія .NET C#) (з використанням бібліотеки Microsoft Graph)
Робоче середовище
- Візуальна студія
-
- Visual Studio 2022
- .МЕРЕЖІ
-
- .NET 8
- API автентифікації Microsoft
-
- 2.0 OAuth 2
- Microsoft OneDrive API
-
- 1.0
- Microsoft.Graph
-
- 5.54.0
- Типи облікових записів Microsoft
-
- Робочий або навчальний обліковий запис
Передумови
- Візуальна студія
-
- Одна з версій
- .МЕРЕЖІ
-
- Одна з версій
- API автентифікації Microsoft
-
- 2.0 OAuth 2
- Microsoft OneDrive API
-
- 1.0
- Microsoft.Graph
-
- 5.ХХ
- Типи облікових записів Microsoft
-
- Робочий або навчальний обліковий запис
Про цю пораду
Ця порада є модифікованою програмою з використанням бібліотеки, заснованої на Microsoft Graph
наступних порадах.
Тому, будь ласка, зверніться до наведеної нижче процедури з порадами щодо огляду та процедури роботи в Azure, а також зверніться до цієї поради під час створення програми.
Передумовою
- У вас є обліковий запис Microsoft для робочого або навчального облікового запису
- Ви можете використовувати OneDrive, пов'язаний із переліченим вище обліковим записом Microsoft (наприклад, OneDrive Business)
- Встановлено Visual Studio 2022
- Ви зареєстрували свою програму в Azure, скориставшись наведеними вище порадами, і отримали необхідну інформацію, наприклад ідентифікатор.
Створення консольного додатку
Запустіть Visual Studio та створіть проект для вашої консольної програми. Ви можете створити його за межами Visual Studio, але я поки що використовую Visual Studio.
Місце розташування та назва проекту не є обов'язковими. У цьому випадку назва проекту - OneDriveApiDotNetClientCredentialsMicrosoftGraph
.
Microsoft.Graph
По-перше, завантажте бібліотеки та Azure.Identity
з NuGet.
Цього разу ми не будемо ділити код, а Program.cs
запишемо його в шаховому порядку зверху, тому, якщо ви можете перевірити рух, будь ласка, перепишіть його, розділивши код за потреби.
using Azure.Identity;
using Microsoft.Graph;
Опишіть простір імен, який ви хочете використовувати.
// 各種 ID などの定義
var clientId = "XXXXXXXX"; // クライアント ID
var tenantId = "XXXXXXXX"; // テナント ID
var clientSecret = "XXXXXXXX"; // クライアント シークレット
var userId = "XXXXXXXX"; // ユーザー ID
Встановіть ідентифікатор, отриманий в Azure, для кожного.
// 使いまわすので最初に定義しておく
HttpClient httpClient = new();
Ви згенерували запит на HttpClient
вказаний URL.
// クライアント シークレットによる認証情報を定義
ClientSecretCredential clientSecretCredential = new(tenantId, clientId, clientSecret);
// HttpClient と認証情報で Microsoft Graph サービスのクライアントを生成
using GraphServiceClient graphClient = new(httpClient, clientSecretCredential);
Визначте секрет клієнта, використовуючи отриманий ID і так далі.
Ви можете використовувати ці дані для HttpClient
GraphServiceClient
створення екземпляра файлу .
GraphServiceClient
Це часто використовується для доступу до різних API.
// 対象ユーザーに紐づく OneDrive を取得 (紐づいているドライブが OneDrive 1つという前提)
var drive = await graphClient.Users[userId].Drive.GetAsync();
if (drive == null)
{
Console.WriteLine("ドライブを取得できませんでした。");
return;
}
GraphServiceClient
, щоб спочатку зв'язати OneDrive із користувачем.
Якщо у вас підключено кілька дисків, Drives
знайдіть і отримайте цільовий OneDrive із файлу .
Можливо, інший диск, крім OneDrive, також пов'язаний, але я не перевіряв так часто.
Якщо ви впевнені, що підключено лише один OneDrive, ви Drive
можете отримати його в тому вигляді, в якому він є у властивостях.
// OneDrive のルートを取得
var root = await graphClient.Drives[drive.Id].Root.GetAsync();
if (root == null)
{
Console.WriteLine("OneDrive のルートを取得できませんでした。");
return;
}
Отримавши OneDrive, ви зможете вільно отримувати до нього доступ. Якщо ви шукаєте ідентифікатор папки або файлу, ви можете вказати його безпосередньо. По-перше, я нічого не перевірив, тому отримую кореневу папку.
// ルート直下にあるフォルダ一覧取得
var rootChildren = await graphClient.Drives[drive.Id].Items[root.Id].Children.GetAsync();
if (rootChildren == null || rootChildren.Value == null)
{
Console.WriteLine("フォルダの一覧を取得できませんでした。");
return;
}
foreach (var item in rootChildren.Value)
{
Console.WriteLine($"Type={(item.File != null ? "File" : "Folder")}, Id={item.Id}, Name={item.Name}, Size={item.Size}");
}
Отримавши кореневу папку, Children
ви можете отримати список файлів і папок безпосередньо під нею.
Після цього я перераховую отримані значення і виводжу назви.
Зведення
Я спробував написати код за допомогою бібліотеки "Microsoft Graph". Я думаю, що ви можете значно зменшити кількість коду в порівнянні з доступом до URL API.
Однак, на мою думку, недоліки полягають у тому, що різні версії бібліотеки можуть викликати несумісні зміни в коді, а документації мало. Якщо ви можете це терпіти, я думаю, було б вигідніше зменшити кількість коду, який ви пишете.
Дякую
Цього разу у мене виникли запитання щодо використання OneDrive API, тому я поставив запитання.