A OneDrive API használatával több mint 200 elemet sorolhat fel egy mappában

Oldal frissítve :
Oldal létrehozásának dátuma :

Működési környezet

Visual Studio
  • Visual Studio 2022
.HÁLÓ
  • .NET 8
Microsoft hitelesítési API
  • 2.0 OAuth 2
Microsoft OneDrive API
  • 1.0
Microsoft.Graph
  • 5.68.0
A Microsoft-fiókok típusai
  • Munkahelyi vagy iskolai fiók

Előfeltételek

Visual Studio
  • Az egyik verzió
.HÁLÓ
  • Az egyik verzió
Microsoft hitelesítési API
  • 2.0 OAuth 2
Microsoft OneDrive API
  • 1.0
Microsoft.Graph
  • 5.XX
A Microsoft-fiókok típusai
  • Munkahelyi vagy iskolai fiók

Az egyszerre lehívható elemek maximális száma

Amikor egy mappa tartalmát a OneDrive API-val kéri le, az egyszerre lekérhető maximális szám 200. Ez az ábra az alábbi hivatalos weboldalon is megtalálható.

Ez akkor is igaz, ha közvetlenül az URL-t találja meg, de Microsoft.Graph akkor is, ha a könyvtárat használja. Az előző tippekben említett következő kód csak legfeljebb 200 eredményt kér le. Nem történik hiba, de ellenőrizheti,DriveItemCollectionResponse.OdataNextLink hogy van-e több mint 201 elem, ha ellenőrzi, hogy a tulajdonság értéke be van-e állítva.

// フォルダ内アイテム一覧取得
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}");
}

Ha HTTP-kéréssel szeretné megszerezni, egyenként @odata.nextLink kell hozzáférnie az URL-hez, hogy megkapja. Microsoft.Graph Ha a könyvtárat használja, egyszerűbb módja van annak, hogy mind a 200 elemet lekérje. PageIterator Van egy osztály, így csak annyit kell tenned, hogy használod. Használja az alábbiak szerint:

// フォルダ内アイテム一覧取得
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();

Miután megkapta a mappaelemek listájának válaszát ()DriveItemCollectionResponse PageIterator.CreatePageIterator Adja meg a metódus második argumentumaként. A harmadik argumentum a visszahívás, amelyet tételenként hívnak meg, így ha listázza, akkor az összes elemet le kell tudnia kapni.

PageIterator.CreatePageIterator Egyébként csak egy iterációt generál, ezért meg kell hívnunk a metódust a végén PageIterator.IterateAsync .