Gebruik de OneDrive-API zonder tussenkomst van de gebruiker, zoals een batchprogramma (.NET C#-versie) (met behulp van de Microsoft Graph-bibliotheek)

Pagina bijgewerkt :
Aanmaakdatum van pagina :

Werkomgeving

Visuele Studio
  • Visuele Studio 2022
.NET
  • .NET 8
API voor Microsoft-verificatie
  • 2.0 OAuth 2
Microsoft OneDrive-API
  • 1.0
Microsoft.Graph
  • 5.54.0
Typen Microsoft-accounts
  • Werk- of schoolaccount

Voorwaarden

Visuele Studio
  • Een van de versies
.NET
  • Een van de versies
API voor Microsoft-verificatie
  • 2.0 OAuth 2
Microsoft OneDrive-API
  • 1.0
Microsoft.Graph
  • 5.XX
Typen Microsoft-accounts
  • Werk- of schoolaccount

Over deze tip

Deze tip is een aangepast programma met behulp van de bibliotheek op basis van Microsoft Graph de volgende tips. Raadpleeg daarom de volgende tipsprocedure voor een overzicht en bedieningsprocedure op Azure en raadpleeg deze tip wanneer u het programma bouwt.

voorwaarde

  • U hebt een Microsoft-account voor een werk- of schoolaccount
  • U kunt de OneDrive gebruiken die is gekoppeld aan het hierboven vermelde Microsoft-account (bijvoorbeeld OneDrive Business)
  • Visual Studio 2022 geïnstalleerd
  • U hebt uw app op Azure geregistreerd door de bovenstaande tips te raadplegen en de benodigde informatie te verkrijgen, zoals ID.

Een console-applicatie maken

Start Visual Studio en maak een project voor uw consoletoepassing. Je kunt het buiten Visual Studio maken, maar ik gebruik voorlopig Visual Studio.

De locatie en projectnaam zijn optioneel. In dit geval is OneDriveApiDotNetClientCredentialsMicrosoftGraph de projectnaam .

Microsoft.Graph Haal eerst de en Azure.Identity bibliotheken van NuGet.

Deze keer zullen we de code niet verdelen, maar Program.cs zullen we deze gespreid van bovenaf schrijven, dus als je de beweging kunt controleren, herschrijf deze dan door de code indien nodig te verdelen.

using Azure.Identity;
using Microsoft.Graph;

Beschrijf de naamruimte die u wilt gebruiken.

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

Stel de id in die voor elk in Azure is verkregen.

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

U heeft een gegenereerd om een verzoek in te dienen bij HttpClient de opgegeven URL.

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

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

Definieer het clientgeheim met behulp van de ID die u hebt verkregen, enzovoort. U kunt die gegevens gebruiken om HttpClient GraphServiceClient een exemplaar van . Dit wordt GraphServiceClient vaak gebruikt om toegang te krijgen tot verschillende API's.

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

GraphServiceClient om de OneDrive als eerste aan de gebruiker te koppelen. Als u meerdere stations hebt gekoppeld, Drives zoekt en haalt u de doel-OneDrive op van . Het kan zijn dat er ook een andere schijf dan OneDrive gekoppeld is, maar ik heb nog niet zo veel gecheckt. Als u zeker weet dat er slechts één OneDrive is gekoppeld, kunt u Drive deze krijgen zoals deze in de eigenschappen staat.

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

Zodra u OneDrive hebt, hebt u er vrij toegang toe. Als u de ID van een map of bestand opzoekt, kunt u deze rechtstreeks opgeven. Allereerst heb ik niets gecontroleerd, dus ik krijg de hoofdmap.

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

Zodra u de hoofdmap heeft, Children kunt u er een lijst met bestanden en mappen direct onder krijgen. Daarna som ik de opgehaalde waarden op en geef ik de namen weer.

Samenvatting

Ik heb geprobeerd om code te schrijven met behulp van de bibliotheek van "Microsoft Graph". Ik denk dat je de hoeveelheid code aanzienlijk kunt verminderen in vergelijking met het openen van de URL van de API.

Ik denk echter dat de nadelen zijn dat verschillende versies van de bibliotheek kapotte wijzigingen in de code kunnen veroorzaken en dat er weinig documentatie is. Als je deze kunt verdragen, denk ik dat het voordeliger zou zijn om de hoeveelheid code die je schrijft te verminderen.

Bedankt

Ik had deze keer wat vragen over het gebruik van de OneDrive-API, dus ik heb een vraag gesteld.