Bir klasördeki 200'den fazla öğeyi numaralandırmak için OneDrive API'sini kullanma

Sayfa güncel :
Sayfa oluşturma tarihi :

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