Usare l'API di OneDrive senza l'interazione dell'utente, ad esempio un programma batch (versione .NET C#) (usando la libreria Microsoft Graph)

Pagina aggiornata :
Data di creazione della pagina :

Ambiente operativo

Studio visivo
  • Studio visivo 2022
.RETE
  • .NET 8
API di autenticazione Microsoft
  • 2.0 OAuth 2
Microsoft OneDrive API
  • 1.0
Microsoft.Graph
  • 5.54.0
Tipi di account Microsoft
  • Account aziendale o dell'istituto di istruzione

Prerequisiti

Studio visivo
  • Una delle versioni
.RETE
  • Una delle versioni
API di autenticazione Microsoft
  • 2.0 OAuth 2
Microsoft OneDrive API
  • 1.0
Microsoft.Graph
  • 5.XX
Tipi di account Microsoft
  • Account aziendale o dell'istituto di istruzione

Informazioni su questo suggerimento

Questo suggerimento è un programma modificato che utilizza la libreria basata sui Microsoft Graph seguenti suggerimenti. Pertanto, fare riferimento alla procedura dei suggerimenti seguente per una panoramica e una procedura operativa su Azure e fare riferimento a questo suggerimento quando si compila il programma.

precondizione

  • Si dispone di un account Microsoft per un account aziendale o dell'istituto di istruzione
  • È possibile utilizzare OneDrive associato all'account Microsoft elencato in precedenza (ad esempio, OneDrive Business)
  • Visual Studio 2022 installato
  • L'app è stata registrata in Azure facendo riferimento ai suggerimenti precedenti e ha ottenuto le informazioni necessarie, ad esempio l'ID.

Creare un'applicazione console

Avviare Visual Studio e creare un progetto per l'applicazione console. È possibile crearlo all'esterno di Visual Studio, ma per il momento utilizzerò Visual Studio.

La posizione e il nome del progetto sono facoltativi. In questo caso, il nome del progetto è OneDriveApiDotNetClientCredentialsMicrosoftGraph .

Microsoft.Graph Prima di tutto, ottenere le librerie e Azure.Identity da NuGet.

Questa volta, non divideremo il codice, ma Program.cs lo scriveremo sfalsato dall'alto, quindi se puoi controllare il movimento, per favore riscrivilo dividendo il codice secondo necessità.

using Azure.Identity;
using Microsoft.Graph;

Descrivi lo spazio dei nomi che desideri utilizzare.

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

Impostare l'ID ottenuto in Azure per ognuno.

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

È stato generato un per effettuare una richiesta all'URL HttpClient specificato.

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

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

Definisci il segreto client utilizzando l'ID ottenuto e così via. È possibile utilizzare tali dati per HttpClient GraphServiceClient creare un'istanza di . Questo viene GraphServiceClient spesso utilizzato per accedere a varie API.

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

GraphServiceClient per ottenere prima l'associazione di OneDrive all'utente. Se sono collegate più unità, Drives trovare e recuperare l'unità OneDrive di destinazione da . È possibile che sia collegata anche un'unità diversa da OneDrive, ma non ho controllato molto. Se si è certi che sia collegato un solo OneDrive, è Drive possibile ottenerlo così com'è nelle proprietà.

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

Una volta che hai OneDrive, puoi accedervi liberamente. Se stai cercando l'ID di una cartella o di un file, puoi specificarlo direttamente. Prima di tutto, non ho controllato nulla, quindi sto ricevendo la cartella principale.

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

Una volta che hai la cartella principale, Children puoi ottenere un elenco di file e cartelle direttamente sotto di essa. Successivamente, enumero i valori recuperati e visualizzo i nomi.

Sommario

Ho provato a scrivere codice utilizzando la libreria di "Microsoft Graph". Penso che sia possibile ridurre notevolmente la quantità di codice rispetto all'accesso all'URL dell'API.

Tuttavia, penso che gli svantaggi siano che diverse versioni della libreria possono causare modifiche di rilievo al codice e c'è poca documentazione. Se riesci a tollerarli, penso che sarebbe più vantaggioso ridurre la quantità di codice che scrivi.

Grazie

Questa volta avevo alcune domande sull'uso dell'API di OneDrive, quindi ho fatto una domanda.