Използване на 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.XX
- Типове акаунти в 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);
Определете тайната на клиента, като използвате идентификационния номер, който сте получили, и т.н.
Можете да използвате тези данни, за да 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.
Въпреки това, мисля, че недостатъците са, че различните версии на библиотеката могат да причинят прекъсващи промени в кода и има малко документация. Ако можете да ги толерирате, мисля, че би било по-изгодно да намалите количеството код, който пишете.
Благодаря
Този път имах някои въпроси относно използването на API на OneDrive, затова зададох въпрос.