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 .