Menggunakan API OneDrive untuk menghitung lebih dari 200 item dalam folder
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
.