Usare l'API di OneDrive senza l'interazione dell'utente, ad esempio un programma batch (versione .NET C#) (usando la libreria Microsoft Graph)
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.