Utilizați API-ul OneDrive fără interacțiunea utilizatorului, cum ar fi un program batch (versiunea .NET C#) (utilizând biblioteca Microsoft Graph)

Pagina actualizată :
Data creării paginii :

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.