Korzystanie z interfejsu API usługi OneDrive bez interakcji z użytkownikiem, takiego jak program wsadowy (wersja .NET C#) (przy użyciu biblioteki Microsoft Graph)

Strona zaktualizowana :
Data utworzenia strony :

Środowisko pracy

Visual Studio
  • informacji o wersji Visual Studio 2022
.SIEĆ
  • .NET 8
Interfejs API uwierzytelniania firmy Microsoft
  • 2.0 Uwierzytelnianie OAuth 2
Microsoft OneDrive API
  • 1.0
Microsoft.Graph (Wykres Microsoftu)
  • 5.54.0
Typy kont Microsoft
  • Konto służbowe

Warunki wstępne

Visual Studio
  • Jedna z wersji
.SIEĆ
  • Jedna z wersji
Interfejs API uwierzytelniania firmy Microsoft
  • 2.0 Uwierzytelnianie OAuth 2
Microsoft OneDrive API
  • 1.0
Microsoft.Graph (Wykres Microsoftu)
  • 5.XX
Typy kont Microsoft
  • Konto służbowe

O tej wskazówce

Ta wskazówka jest zmodyfikowanym programem korzystającym z biblioteki opartej na Microsoft Graph następujących wskazówkach. W związku z tym zapoznaj się z poniższą procedurą porad, aby zapoznać się z omówieniem i procedurą obsługi na platformie Azure, a także zapoznaj się z tą poradą podczas kompilowania programu.

Warunek wstępny

  • Masz konto Microsoft dla konta służbowego
  • Możesz użyć usługi OneDrive skojarzonej z kontem Microsoft wymienionym powyżej (np. OneDrive Business)
  • Zainstalowany program Visual Studio 2022
  • Aplikacja została zarejestrowana na platformie Azure, korzystając z powyższych porad i uzyskano niezbędne informacje, takie jak identyfikator.

Tworzenie aplikacji konsolowej

Uruchom program Visual Studio i utwórz projekt dla aplikacji konsolowej. Można go utworzyć poza programem Visual Studio, ale na razie będę używać programu Visual Studio.

Lokalizacja i nazwa projektu są opcjonalne. W tym przypadku nazwa projektu to OneDriveApiDotNetClientCredentialsMicrosoftGraph .

Microsoft.Graph Najpierw pobierz biblioteki i Azure.Identity z NuGet.

Tym razem nie będziemy dzielić kodu, ale Program.cs napiszemy go naprzemiennie od góry, więc jeśli możesz sprawdzić ruch, przepisz go, dzieląc kod według potrzeb.

using Azure.Identity;
using Microsoft.Graph;

Opisz przestrzeń nazw, której chcesz użyć.

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

Ustaw identyfikator uzyskany na platformie Azure dla każdego z nich.

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

Wygenerowano polecenie , aby wysłać żądanie na HttpClient określony adres URL.

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

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

Zdefiniuj klucz tajny klienta przy użyciu uzyskanego identyfikatora i tak dalej. Możesz użyć tych danych do HttpClient GraphServiceClient utworzenia instancji . Jest GraphServiceClient to często używane do uzyskiwania dostępu do różnych interfejsów API.

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

GraphServiceClient , aby najpierw skojarzyć usługę OneDrive z użytkownikiem. Jeśli masz połączonych wiele dysków, Drives znajdź i pobierz docelową usługę OneDrive z programu . Możliwe, że dysk inny niż OneDrive jest również połączony, ale nie sprawdzałem tego zbyt wiele. Jeśli masz pewność, że tylko jedna usługa OneDrive jest połączona, możesz Drive ją pobrać w takiej postaci, w jakiej jest we właściwościach.

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

Gdy masz już OneDrive, możesz uzyskać do niego swobodny dostęp. Jeśli szukasz identyfikatora folderu lub pliku, możesz go określić bezpośrednio. Przede wszystkim niczego nie sprawdzałem, więc dostaję folder główny.

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

Gdy masz już folder główny, Children możesz uzyskać listę plików i folderów bezpośrednio pod nim. Następnie wyliczam pobrane wartości i wyświetlam nazwy.

Streszczenie

Próbowałem pisać kod przy użyciu biblioteki "Microsoft Graph". Myślę, że możesz znacznie zmniejszyć ilość kodu w porównaniu z dostępem do adresu URL interfejsu API.

Myślę jednak, że wadą jest to, że różne wersje biblioteki mogą powodować zmiany powodujące niezgodność w kodzie i jest mało dokumentacji. Jeśli jesteś w stanie to tolerować, myślę, że korzystniej byłoby zmniejszyć ilość pisanego kodu.

dzięki

Tym razem miałem kilka pytań dotyczących korzystania z interfejsu API OneDrive, więc zadałem pytanie.