Gunakan API OneDrive tanpa interaksi pengguna, seperti program kelompok (versi .NET C#) (menggunakan pustaka Microsoft Graph)

Laman dikemaskini :
Tarikh penciptaan halaman :

Persekitaran operasi

Visual Studio
  • Visual Studio 2022
.BERSIH
  • .NET 8
API Pengesahan Microsoft
  • 2.0 OAuth 2
Microsoft OneDrive API
  • 1.0
Microsoft.Graph
  • 5.54.0
Jenis akaun Microsoft
  • Akaun kerja atau sekolah

Prasyarat

Visual Studio
  • Salah satu versi
.BERSIH
  • Salah satu versi
API Pengesahan Microsoft
  • 2.0 OAuth 2
Microsoft OneDrive API
  • 1.0
Microsoft.Graph
  • 5.XX
Jenis akaun Microsoft
  • Akaun kerja atau sekolah

Mengenai petua ini

Petua ini adalah program yang diubah suai menggunakan perpustakaan berdasarkan Microsoft Graph Petua berikut. Oleh itu, sila rujuk prosedur petua berikut untuk gambaran keseluruhan dan prosedur operasi di Azure, dan rujuk petua ini apabila anda membina program.

prasyarat

  • Anda mempunyai akaun Microsoft untuk akaun kerja atau sekolah
  • Anda boleh menggunakan OneDrive yang dikaitkan dengan akaun Microsoft yang disenaraikan di atas (cth., OneDrive Business)
  • Visual Studio 2022 dipasang
  • Anda telah mendaftarkan aplikasi anda di Azure dengan merujuk kepada petua di atas dan memperoleh maklumat yang diperlukan seperti ID.

Buat aplikasi konsol

Mulakan Visual Studio dan buat projek untuk aplikasi konsol anda. Anda boleh menciptanya di luar Visual Studio, tetapi saya akan menggunakan Visual Studio buat masa ini.

Lokasi dan nama projek adalah pilihan. Dalam kes ini, nama projek ialah OneDriveApiDotNetClientCredentialsMicrosoftGraph .

Microsoft.Graph Mula-mula, dapatkan dan perpustakaan Azure.Identity daripada NuGet.

Kali ini, kami tidak akan membahagikan kod, tetapi Program.cs akan menulisnya secara berperingkat-peringkat dari atas, jadi jika anda boleh menyemak pergerakan, sila tulis semula dengan membahagikan kod mengikut keperluan.

using Azure.Identity;
using Microsoft.Graph;

Terangkan ruang nama yang anda mahu gunakan.

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

Tetapkan ID yang diperoleh pada Azure untuk setiap satu.

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

Anda telah menjana a untuk membuat permintaan kepada HttpClient URL yang ditentukan.

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

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

Tentukan rahsia klien menggunakan ID yang anda perolehi, dan sebagainya. Anda boleh menggunakan data tersebut untuk HttpClient GraphServiceClient mencipta contoh . Ini GraphServiceClient sering digunakan untuk mengakses pelbagai API.

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

GraphServiceClient untuk mendapatkan OneDrive yang dikaitkan dengan pengguna terlebih dahulu. Jika anda mempunyai berbilang pemacu yang dipautkan, Drives cari dan dapatkan semula OneDrive sasaran daripada . Ada kemungkinan bahawa pemacu selain OneDrive juga dipautkan, tetapi saya belum menyemak sebanyak itu. Jika anda pasti bahawa hanya satu OneDrive dipautkan, anda Drive boleh mendapatkannya seperti dalam sifat.

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

Sebaik sahaja anda mempunyai OneDrive, anda boleh mengaksesnya dengan bebas. Jika anda mencari ID folder atau fail, anda boleh menentukannya secara langsung. Pertama sekali, saya belum menyemak apa-apa, jadi saya mendapat folder akar.

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

Sebaik sahaja anda mempunyai folder akar, Children anda boleh mendapatkan senarai fail dan folder terus di bawahnya. Selepas itu, saya menghitung nilai yang diambil dan memaparkan nama.

Ringkasan

Saya cuba menulis kod menggunakan perpustakaan "Microsoft Graph". Saya rasa anda boleh mengurangkan jumlah kod dengan ketara berbanding mengakses URL API.

Walau bagaimanapun, saya fikir kelemahannya ialah versi perpustakaan yang berbeza boleh menyebabkan perubahan pecah pada kod dan terdapat sedikit dokumentasi. Jika anda boleh bertolak ansur dengan ini, saya rasa lebih berfaedah untuk mengurangkan jumlah kod yang anda tulis.

Terima kasih

Saya mempunyai beberapa soalan tentang menggunakan API OneDrive kali ini, jadi saya bertanya soalan.