Menggunakan API OneDrive untuk menghitung lebih dari 200 item dalam folder

Halaman Diperbarui :
Tanggal pembuatan halaman :

Lingkungan operasi

Visual Studio
  • Visual Studio 2022
.JARING
  • .NET 8
API Autentikasi Microsoft
  • 2.0 OAuth 2
Microsoft OneDrive API
  • 1.0
Microsoft.Graph
  • 5.68.0
Jenis akun Microsoft
  • Akun kerja atau sekolah

Prasyarat

Visual Studio
  • Salah satu versi
.JARING
  • Salah satu versi
API Autentikasi Microsoft
  • 2.0 OAuth 2
Microsoft OneDrive API
  • 1.0
Microsoft.Graph
  • 5.XX
Jenis akun Microsoft
  • Akun kerja atau sekolah

Jumlah maksimum item yang dapat diambil pada satu waktu

Saat mengambil konten folder dengan API OneDrive, jumlah maksimum yang dapat diambil pada satu waktu adalah 200. Angka ini juga dapat ditemukan di situs web resmi di bawah ini.

Ini benar bahkan jika Anda menekan URL secara langsung, tetapi Microsoft.Graph juga jika Anda menggunakan perpustakaan. Kode berikut, yang disebutkan dalam tips sebelumnya, hanya mengambil hingga 200 hasil. Tidak ada kesalahan yang akan terjadi,DriveItemCollectionResponse.OdataNextLink tetapi Anda dapat memeriksa apakah ada lebih dari 201 item dengan memeriksa apakah nilai properti diatur.

// フォルダ内アイテム一覧取得
var folderChildren = await graphClient.Drives[drive.Id].Items[folderItem.Id].Children.GetAsync();
if (folderChildren == null || folderChildren.Value == null)
{
  Console.WriteLine("フォルダの一覧を取得できませんでした。");
  return;
}
foreach (var item in folderChildren.Value)
{
  Console.WriteLine($"Type={(item.File != null ? "File" : "Folder")}, Id={item.Id}, Name={item.Name}, Size={item.Size}");
}

Jika Anda ingin mendapatkannya dengan permintaan HTTP, Anda @odata.nextLink perlu mengakses URL satu per satu untuk mendapatkannya. Microsoft.Graph Jika Anda menggunakan perpustakaan, ada cara yang lebih mudah untuk mendapatkan lebih dari 200 item. PageIterator Ada kelas yang disebut , jadi yang harus Anda lakukan adalah menggunakannya. Gunakan sebagai berikut:

// フォルダ内アイテム一覧取得
var folderChildren = await graphClient.Drives[drive.Id].Items[folderItem.Id].Children.GetAsync();
if (folderChildren == null || folderChildren.Value == null)
{
  Console.WriteLine("フォルダの一覧を取得できませんでした。");
  return;
}

var pageIterator = PageIterator<DriveItem, DriveItemCollectionResponse>.CreatePageIterator(
      graphClient,
      folderChildren,
      (item) =>
      {
        Console.WriteLine($"Type={(item.File != null ? "File" : "Folder")}, Id={item.Id}, Name={item.Name}, Size={item.Size}");
        return true;  // false を返すまで次のアイテムを列挙します
      });
await pageIterator.IterateAsync();

Setelah Anda mendapatkan respons daftar item folder (DriveItemCollectionResponse) PageIterator.CreatePageIterator Tentukan sebagai argumen kedua dari metode. Argumen ketiga adalah callback, yang dipanggil berdasarkan item demi item, jadi jika Anda mencantumkannya, Anda harus bisa mendapatkan semua item.

PageIterator.CreatePageIterator Ngomong-ngomong, hanya menghasilkan iterasi, jadi kita perlu memanggil metode di akhir PageIterator.IterateAsync .