Utilizați API-ul OneDrive fără interacțiunea utilizatorului, cum ar fi un program batch (versiunea .NET C#) (utilizând biblioteca Microsoft Graph)
Mediul de operare
- Visual Studio
-
- Visual Studio 2022
- .NET
-
- .NET 8
- API de autentificare Microsoft
-
- 2.0 OAuth 2
- API-ul Microsoft OneDrive
-
- 1.0
- Microsoft.Graph
-
- 5.54.0
- Tipuri de conturi Microsoft
-
- Cont de la locul de muncă sau de la școală
Cerințe preliminare
- Visual Studio
-
- Una dintre versiuni
- .NET
-
- Una dintre versiuni
- API de autentificare Microsoft
-
- 2.0 OAuth 2
- API-ul Microsoft OneDrive
-
- 1.0
- Microsoft.Graph
-
- 5.XX
- Tipuri de conturi Microsoft
-
- Cont de la locul de muncă sau de la școală
Despre acest sfat
Acest sfat este un program modificat care utilizează biblioteca bazată pe Microsoft Graph
următoarele sfaturi.
Prin urmare, vă rugăm să consultați următoarea procedură de sfaturi pentru o prezentare generală și procedura de operare pe Azure și consultați acest sfat atunci când construiți programul.
Condiție prealabilă
- Aveți un cont Microsoft pentru un cont de la locul de muncă sau de la școală
- Puteți utiliza OneDrive asociat contului Microsoft enumerat mai sus (de exemplu, OneDrive Business)
- Visual Studio 2022 instalat
- Ați înregistrat aplicația pe Azure făcând referire la sfaturile de mai sus și ați obținut informațiile necesare, cum ar fi ID-ul.
Crearea unei aplicații de consolă
Porniți Visual Studio și creați un proiect pentru aplicația consolă. Îl puteți crea în afara Visual Studio, dar voi folosi Visual Studio deocamdată.
Locația și numele proiectului sunt opționale. În acest caz, numele proiectului este OneDriveApiDotNetClientCredentialsMicrosoftGraph
.
Microsoft.Graph
Mai întâi, obțineți bibliotecile și Azure.Identity
de la NuGet.
De data aceasta, nu vom împărți codul, ci Program.cs
îl vom scrie eșalonat de sus, așa că dacă puteți verifica mișcarea, vă rugăm să o rescrieți împărțind codul după cum este necesar.
using Azure.Identity;
using Microsoft.Graph;
Descrieți spațiul de nume pe care doriți să-l utilizați.
// 各種 ID などの定義
var clientId = "XXXXXXXX"; // クライアント ID
var tenantId = "XXXXXXXX"; // テナント ID
var clientSecret = "XXXXXXXX"; // クライアント シークレット
var userId = "XXXXXXXX"; // ユーザー ID
Setați ID-ul obținut pe Azure pentru fiecare.
// 使いまわすので最初に定義しておく
HttpClient httpClient = new();
Ați generat un pentru a face o solicitare la HttpClient
adresa URL specificată.
// クライアント シークレットによる認証情報を定義
ClientSecretCredential clientSecretCredential = new(tenantId, clientId, clientSecret);
// HttpClient と認証情報で Microsoft Graph サービスのクライアントを生成
using GraphServiceClient graphClient = new(httpClient, clientSecretCredential);
Definiți secretul clientului folosind ID-ul pe care l-ați obținut și așa mai departe.
Puteți utiliza aceste date pentru a HttpClient
GraphServiceClient
crea o instanță de .
Acest lucru este GraphServiceClient
adesea folosit pentru a accesa diverse API-uri.
// 対象ユーザーに紐づく OneDrive を取得 (紐づいているドライブが OneDrive 1つという前提)
var drive = await graphClient.Users[userId].Drive.GetAsync();
if (drive == null)
{
Console.WriteLine("ドライブを取得できませんでした。");
return;
}
GraphServiceClient
pentru a obține mai întâi OneDrive asociat cu utilizatorul.
Dacă aveți mai multe unități conectate, Drives
găsiți și preluați OneDrive țintă din .
Este posibil ca și o altă unitate decât OneDrive să fie legată, dar nu am verificat atât de mult.
Dacă sunteți sigur că este conectat un singur OneDrive, Drive
îl puteți obține așa cum este în proprietăți.
// OneDrive のルートを取得
var root = await graphClient.Drives[drive.Id].Root.GetAsync();
if (root == null)
{
Console.WriteLine("OneDrive のルートを取得できませんでした。");
return;
}
Odată ce aveți OneDrive, îl puteți accesa liber. Dacă căutați ID-ul unui folder sau fișier, îl puteți specifica direct. În primul rând, nu am verificat nimic, așa că primesc folderul rădăcină.
// ルート直下にあるフォルダ一覧取得
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}");
}
Odată ce aveți folderul rădăcină, Children
puteți obține o listă de fișiere și foldere direct sub el.
După aceea, enumer valorile recuperate și afișez numele.
Rezumat
Am încercat să scriu cod folosind biblioteca "Microsoft Graph". Cred că puteți reduce cantitatea de cod considerabil în comparație cu accesarea URL-ului API-ului.
Cu toate acestea, cred că dezavantajele sunt că diferite versiuni ale bibliotecii pot provoca modificări de ultimă oră ale codului și există puțină documentație. Dacă le puteți tolera, cred că ar fi mai avantajos să reduceți cantitatea de cod pe care o scrieți.
mulţumesc
Am avut câteva întrebări despre utilizarea API-ului OneDrive de data aceasta, așa că am pus o întrebare.