Utilitzeu l'API del OneDrive sense interacció de l'usuari, com ara un programa per lots (versió de .NET C#) (mitjançant la biblioteca del Microsoft Graph)

Pàgina actualitzada :
Data de creació de la pàgina :

Entorn operatiu

Visual Studio
  • Visual Studio 2022
.XARXA
  • .NET 8
API d'autenticació de Microsoft
  • 2.0 OAuth 2
Microsoft OneDrive API
  • 1.0
Microsoft.Graph
  • 5.54.0
Tipus de comptes de Microsoft
  • Compte de la feina o d'un centre educatiu

Prerequisits

Visual Studio
  • Una de les versions
.XARXA
  • Una de les versions
API d'autenticació de Microsoft
  • 2.0 OAuth 2
Microsoft OneDrive API
  • 1.0
Microsoft.Graph
  • 5.XX
Tipus de comptes de Microsoft
  • Compte de la feina o d'un centre educatiu

Sobre aquest consell

Aquest consell és un programa modificat que utilitza la biblioteca basada en Microsoft Graph els següents consells. Per tant, consulteu el següent procediment de consells per obtenir una visió general i el procediment d'operació a l'Azure, i consulteu aquest consell quan creeu el programa.

Precondició

  • Teniu un compte de Microsoft per a un compte de la feina o d'un centre educatiu
  • Podeu utilitzar el OneDrive associat amb el compte de Microsoft esmentat anteriorment (per exemple, OneDrive Business)
  • Visual Studio 2022 instal·lat
  • Heu registrat la vostra aplicació a Azure fent referència als consells anteriors i heu obtingut la informació necessària, com ara l'identificació.

Crear una aplicació de consola

Inicieu Visual Studio i creeu un projecte per a l'aplicació de consola. Podeu crear-lo fora de Visual Studio, però de moment utilitzaré Visual Studio.

La ubicació i el nom del projecte són opcionals. En aquest cas, el nom del projecte és OneDriveApiDotNetClientCredentialsMicrosoftGraph .

Microsoft.Graph En primer lloc, obteniu les biblioteques i Azure.Identity del NuGet.

Aquesta vegada, no dividirem el codi, sinó Program.cs que l'escriurem esglaonat des de la part superior, així que si podeu comprovar el moviment, reescriviu-lo dividint el codi segons sigui necessari.

using Azure.Identity;
using Microsoft.Graph;

Descriu l'espai de noms que vols utilitzar.

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

Definiu l'identificador obtingut a l'Azure per a cadascun.

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

Heu generat un per fer una sol·licitud a HttpClient l'URL especificat.

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

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

Definiu el secret del client mitjançant l'identificador que heu obtingut, etc. Podeu utilitzar aquestes dades per HttpClient GraphServiceClient crear una instància de . Això s'utilitza GraphServiceClient sovint per accedir a diverses API.

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

GraphServiceClient per obtenir primer el OneDrive associat amb l'usuari. Si teniu diverses unitats enllaçades, Drives cerqueu i recupereu el OneDrive de destinació del . És possible que també estigui enllaçada una unitat que no sigui OneDrive, però no ho he comprovat gaire. Si esteu segur que només hi ha un OneDrive enllaçat, podeu Drive obtenir-lo tal com està a les propietats.

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

Un cop tingueu OneDrive, podeu accedir-hi lliurement. Si esteu cercant l'identificador d'una carpeta o fitxer, podeu especificar-lo directament. En primer lloc, no he comprovat res, així que estic rebent la carpeta arrel.

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

Un cop tingueu la carpeta arrel, Children podeu obtenir una llista de fitxers i carpetes directament a sota. Després d'això, enumero els valors recuperats i mostro els noms.

Resum

Vaig intentar escriure codi utilitzant la biblioteca de "Microsoft Graph". Crec que podeu reduir considerablement la quantitat de codi en comparació amb l'accés a l'URL de l'API.

No obstant això, crec que els desavantatges són que diferents versions de la biblioteca poden causar canvis trencadors en el codi i hi ha poca documentació. Si podeu tolerar-los, crec que seria més avantatjós reduir la quantitat de codi que escriviu.

gràcies

Aquesta vegada tenia algunes preguntes sobre l'ús de l'API de OneDrive, així que vaig fer una pregunta.