Gunakan API OneDrive untuk menghitung lebih daripada 200 item dalam folder

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.68.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

Bilangan maksimum item yang boleh diambil pada satu masa

Apabila mendapatkan semula kandungan folder dengan API OneDrive, bilangan maksimum yang boleh diambil pada satu masa ialah 200. Angka ini juga boleh didapati di laman web rasmi di bawah.

Ini benar walaupun anda menekan URL secara langsung, tetapi Microsoft.Graph juga jika anda menggunakan pustaka. Kod berikut, yang disebutkan dalam petua sebelumnya, hanya mendapatkan sehingga 200 keputusan. Tiada ralat akan berlaku,DriveItemCollectionResponse.OdataNextLink tetapi anda boleh menyemak sama ada terdapat lebih daripada 201 item dengan menyemak sama ada nilai harta itu ditetapkan.

// フォルダ内アイテム一覧取得
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 melalui permintaan HTTP, anda @odata.nextLink perlu mengakses URL satu demi satu untuk mendapatkannya. Microsoft.Graph Jika anda menggunakan perpustakaan, terdapat cara yang lebih mudah untuk mendapatkan lebih daripada 200 item. PageIterator Terdapat kelas yang dipanggil , jadi apa yang anda perlu lakukan ialah menggunakannya. Gunakannya seperti 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();

Sebaik sahaja anda mendapat respons senarai item folder (DriveItemCollectionResponse) PageIterator.CreatePageIterator Tentukan sebagai hujah kedua kaedah. Hujah ketiga ialah panggilan balik, yang dipanggil berdasarkan item demi item, jadi jika anda menyenaraikannya, anda sepatutnya boleh mendapatkan semua item.

PageIterator.CreatePageIterator Dengan cara ini, hanya menjana lelaran, jadi kita perlu memanggil kaedah pada akhir PageIterator.IterateAsync .