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)
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.