Verwenden der OneDrive-API ohne Benutzerinteraktion, z. B. ein Batchprogramm (.NET C#-Version) (unter Verwendung der Microsoft Graph-Bibliothek)

Diese Seite wurde aktualisiert :
Erstellungsdatum der Seite :

Betriebsumgebung

Visuelles Studio
  • Visual Studio 2022
.NETTO
  • .NET 8
Microsoft-Authentifizierungs-API
  • 2.0 OAuth 2
Microsoft OneDrive-API
  • 1.0
Microsoft.Graph
  • 5.54.0
Arten von Microsoft-Konten
  • Geschäfts-, Schul- oder Unikonto

Voraussetzungen

Visuelles Studio
  • Eine der Varianten
.NETTO
  • Eine der Varianten
Microsoft-Authentifizierungs-API
  • 2.0 OAuth 2
Microsoft OneDrive-API
  • 1.0
Microsoft.Graph
  • 5.XX
Arten von Microsoft-Konten
  • Geschäfts-, Schul- oder Unikonto

Über diesen Tipp

Dieser Tipp ist ein modifiziertes Programm, das die Bibliothek verwendet, die auf Microsoft Graph den folgenden Tipps basiert. Lesen Sie daher die folgenden Tipps für eine Übersicht und ein Betriebsverfahren in Azure, und beziehen Sie sich beim Erstellen des Programms auf diesen Tipp.

Vorbedingung

  • Sie verfügen über ein Microsoft-Konto für ein Geschäfts-, Schul- oder Unikonto
  • Sie können das OneDrive verwenden, das mit dem oben aufgeführten Microsoft-Konto verknüpft ist (z. B. OneDrive Business)
  • Visual Studio 2022 installiert
  • Sie haben Ihre App in Azure registriert, indem Sie sich auf die obigen Tipps bezogen haben, und die erforderlichen Informationen wie die ID erhalten.

Erstellen einer Konsolenanwendung

Starten Sie Visual Studio, und erstellen Sie ein Projekt für Ihre Konsolenanwendung. Sie können es außerhalb von Visual Studio erstellen, aber ich werde vorerst Visual Studio verwenden.

Der Speicherort und der Projektname sind optional. In diesem Fall lautet OneDriveApiDotNetClientCredentialsMicrosoftGraph der Projektname .

Microsoft.Graph Rufen Sie zunächst die Azure.Identity und-Bibliotheken aus NuGet ab.

Dieses Mal werden wir den Code nicht teilen, sondern Program.cs ihn gestaffelt von oben schreiben, wenn Sie also die Bewegung überprüfen können, schreiben Sie sie bitte neu, indem Sie den Code nach Bedarf teilen.

using Azure.Identity;
using Microsoft.Graph;

Beschreiben Sie den Namespace, den Sie verwenden möchten.

// 各種 ID などの定義
var clientId = "XXXXXXXX";      // クライアント ID
var tenantId = "XXXXXXXX";      // テナント ID
var clientSecret = "XXXXXXXX";  // クライアント シークレット
var userId = "XXXXXXXX";        // ユーザー ID

Legen Sie jeweils die in Azure abgerufene ID fest.

// 使いまわすので最初に定義しておく
HttpClient httpClient = new();

Sie haben eine generiert, um eine Anforderung an HttpClient die angegebene URL zu senden.

// クライアント シークレットによる認証情報を定義
ClientSecretCredential clientSecretCredential = new(tenantId, clientId, clientSecret);

// HttpClient と認証情報で Microsoft Graph サービスのクライアントを生成
using GraphServiceClient graphClient = new(httpClient, clientSecretCredential);

Definieren Sie den geheimen Clientschlüssel mithilfe der ID, die Sie abgerufen haben, usw. Sie können diese Daten verwenden, um HttpClient GraphServiceClient eine Instanz von zu erstellen. Dies wird GraphServiceClient häufig verwendet, um auf verschiedene APIs zuzugreifen.

// 対象ユーザーに紐づく OneDrive を取得 (紐づいているドライブが OneDrive 1つという前提)
var drive = await graphClient.Users[userId].Drive.GetAsync();
if (drive == null)
{
  Console.WriteLine("ドライブを取得できませんでした。");
  return;
}

GraphServiceClient , um zuerst das OneDrive abzurufen, das dem Benutzer zugeordnet ist. Wenn Sie mehrere Laufwerke verknüpft haben, Drives suchen Sie das OneDrive-Ziellaufwerk, und rufen Sie es von ab. Es ist möglich, dass auch ein anderes Laufwerk als OneDrive verknüpft ist, aber ich habe das noch nicht genau überprüft. Wenn Sie sicher sind, dass nur ein OneDrive verknüpft ist, können Sie Drive es so abrufen, wie es in den Eigenschaften steht.

// OneDrive のルートを取得
var root = await graphClient.Drives[drive.Id].Root.GetAsync();
if (root == null)
{
  Console.WriteLine("OneDrive のルートを取得できませんでした。");
  return;
}

Sobald Sie OneDrive haben, können Sie frei darauf zugreifen. Wenn Sie die ID eines Ordners oder einer Datei nachschlagen, können Sie sie direkt angeben. Zunächst einmal habe ich nichts überprüft, also bekomme ich den Stammordner.

// ルート直下にあるフォルダ一覧取得
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}");
}

Sobald Sie den Stammordner haben, Children können Sie eine Liste der Dateien und Ordner direkt darunter abrufen. Danach liste ich die abgerufenen Werte auf und zeige die Namen an.

Zusammenfassung

Ich habe versucht, Code mit der Bibliothek von "Microsoft Graph" zu schreiben. Ich denke, Sie können die Codemenge im Vergleich zum Zugriff auf die URL der API erheblich reduzieren.

Ich denke jedoch, dass die Nachteile darin bestehen, dass verschiedene Versionen der Bibliothek zu Breaking Changes am Code führen können und es wenig Dokumentation gibt. Wenn Sie diese tolerieren können, wäre es meiner Meinung nach vorteilhafter, die Menge an Code, die Sie schreiben, zu reduzieren.

Danke

Ich hatte dieses Mal einige Fragen zur Verwendung der OneDrive-API, also habe ich eine Frage gestellt.