Bir klasördeki 200'den fazla öğeyi numaralandırmak için OneDrive API'sini kullanma
Çalışma ortamı
- Görsel Stüdyo
-
- Görsel Studio 2022
- .NET
-
- .NET 8
- Microsoft Kimlik Doğrulama API'si
-
- 2.0 OAuth 2
- Microsoft OneDrive API'sı
-
- 1.0
- Microsoft.Graph
-
- 5.68.0
- Microsoft hesabı türleri
-
- İş veya okul hesabı
Önkoşullar
- Görsel Stüdyo
-
- Sürümlerden biri
- .NET
-
- Sürümlerden biri
- Microsoft Kimlik Doğrulama API'si
-
- 2.0 OAuth 2
- Microsoft OneDrive API'sı
-
- 1.0
- Microsoft.Graph
-
- 5.XX
- Microsoft hesabı türleri
-
- İş veya okul hesabı
Bir kerede alınabilecek en fazla öğe sayısı
OneDrive API ile bir klasörün içeriğini alırken, bir kerede alınabilecek maksimum sayı 200'dür. Bu rakam aşağıdaki resmi web sitesinde de bulunabilir.
Bu, doğrudan URL'ye bassanız bile, aynı Microsoft.Graph zamanda kitaplığı kullanıyorsanız da geçerlidir.
Önceki ipuçlarında bahsedilen aşağıdaki kod yalnızca en fazla 200 sonuç alır.
Herhangi bir hata oluşmaz,DriveItemCollectionResponse.OdataNextLink ancak özelliğin değerinin ayarlanıp ayarlanmadığını kontrol ederek 201'den fazla öğe olup olmadığını kontrol edebilirsiniz.
// フォルダ内アイテム一覧取得
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}");
}
HTTP isteği ile almak istiyorsanız, @odata.nextLink almak için URL'sine tek tek erişmeniz gerekir.
Microsoft.Graph Kitaplığı kullanıyorsanız, 200'den fazla öğeyi almanın daha kolay bir yolu var.
PageIterator adında bir sınıf var, bu yüzden tek yapmanız gereken onu kullanmak. Aşağıdaki gibi kullanın:
// フォルダ内アイテム一覧取得
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();
Klasör öğesi listesi yanıtını aldığınızda (DriveItemCollectionResponse)
PageIterator.CreatePageIterator Bunu, yöntemin ikinci bağımsız değişkeni olarak belirtin.
Üçüncü bağımsız değişken, öğe bazında çağrılan bir geri aramadır, bu nedenle listelerseniz, tüm öğeleri alabilmeniz gerekir.
PageIterator.CreatePageIterator Bu arada, sadece bir yineleme oluşturuyor, bu yüzden sonunda PageIterator.IterateAsync yöntemi çağırmamız gerekiyor .