Använd OneDrive-API:et utan användarinteraktion, till exempel ett batchprogram (.NET C#-version) (med hjälp av Microsoft Graph-biblioteket)

Sidan uppdaterad :
Datum för skapande av sida :

Operativ miljö

Visuell Studio
  • Visual Studio 2022
.NÄT
  • .NET 8
API för Microsoft-autentisering
  • 2.0 OAuth 2
Microsoft OneDrive API
  • 1.0
Microsoft.Graph (på engelska)
  • 5.54.0
Typer av Microsoft-konton
  • Arbets- eller skolkonto

Förutsättningar

Visuell Studio
  • En av versionerna
.NÄT
  • En av versionerna
API för Microsoft-autentisering
  • 2.0 OAuth 2
Microsoft OneDrive API
  • 1.0
Microsoft.Graph (på engelska)
  • 5.XX
Typer av Microsoft-konton
  • Arbets- eller skolkonto

Om det här tipset

Det här tipset är ett modifierat program som använder biblioteket baserat på Microsoft Graph följande tips. Se därför följande tipsprocedur för en översikt och åtgärdsprocedur i Azure, och hänvisa till det här tipset när du skapar programmet.

förutsättning

  • Du har ett Microsoft-konto för ett arbets- eller skolkonto
  • Du kan använda den OneDrive som är kopplad till Microsoft-kontot som anges ovan (t.ex. OneDrive Business)
  • Visual Studio 2022 installerat
  • Du har registrerat din app på Azure genom att hänvisa till tipsen ovan och fått nödvändig information, till exempel ID.

Skapa ett konsolprogram

Starta Visual Studio och skapa ett projekt för konsolprogrammet. Du kan skapa den utanför Visual Studio, men jag använder Visual Studio för tillfället.

Platsen och projektnamnet är valfria. I det här fallet är OneDriveApiDotNetClientCredentialsMicrosoftGraph projektnamnet .

Microsoft.Graph Hämta först biblioteken och Azure.Identity från NuGet.

Den här gången kommer vi inte att dela upp koden, utan Program.cs kommer att skriva den förskjuten från toppen, så om du kan kontrollera rörelsen, skriv om den genom att dela upp koden efter behov.

using Azure.Identity;
using Microsoft.Graph;

Beskriv det namnområde som du vill använda.

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

Ange det ID som hämtas i Azure för var och en.

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

Du har genererat en för att göra en begäran till HttpClient den angivna URL:en.

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

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

Definiera klienthemligheten med hjälp av det ID som du fick och så vidare. Du kan använda dessa data för att HttpClient GraphServiceClient skapa en instans av . Detta används GraphServiceClient ofta för att komma åt olika API:er.

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

GraphServiceClient för att hämta OneDrive som är associerad med användaren först. Om du har flera enheter länkade Drives letar du upp och hämtar OneDrive-målet från . Det är möjligt att en annan enhet än OneDrive också är länkad, men jag har inte kollat så mycket. Om du är säker på att endast en OneDrive är länkad kan du Drive få den som den är i egenskaperna.

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

När du väl har OneDrive kan du komma åt det fritt. Om du letar upp ID:t för en mapp eller fil kan du ange det direkt. Först och främst har jag inte kontrollerat någonting, så jag får rotmappen.

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

När du har rotmappen Children kan du få en lista över filer och mappar direkt under den. Därefter räknar jag upp de hämtade värdena och visar namnen.

Sammanfattning

Jag försökte skriva kod med hjälp av biblioteket i "Microsoft Graph". Jag tror att du kan minska mängden kod avsevärt jämfört med att komma åt URL:en för API:et.

Jag tror dock att nackdelarna är att olika versioner av biblioteket kan orsaka icke-bakåtkompatibla ändringar i koden och att det finns lite dokumentation. Om du kan tolerera dessa tror jag att det skulle vara mer fördelaktigt att minska mängden kod du skriver.

Tack

Jag hade några frågor om hur jag använder OneDrive API den här gången, så jag ställde en fråga.