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