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