Použitie rozhrania OneDrive API na vytvorenie zoznamu viac ako 200 položiek v priečinku

Stránka aktualizovaná :
Dátum vytvorenia strany :

Prevádzkové prostredie

Visual Studio
  • Visual Studio 2022
.SIEŤ
  • .NET 8
Microsoft Authentication API
  • 2.0 OAuth 2
Microsoft OneDrive API
  • 1.0
Microsoft.Graph
  • 5.68.0
Typy kont Microsoft
  • Pracovné alebo školské konto

Predpoklady

Visual Studio
  • Jedna z verzií
.SIEŤ
  • Jedna z verzií
Microsoft Authentication API
  • 2.0 OAuth 2
Microsoft OneDrive API
  • 1.0
Microsoft.Graph
  • 5.XX
Typy kont Microsoft
  • Pracovné alebo školské konto

Maximálny počet položiek, ktoré je možné naraz načítať

Pri načítaní obsahu priečinka pomocou rozhrania OneDrive API je maximálny počet, ktorý je možné načítať naraz, 200. Tento údaj nájdete aj na oficiálnej webovej stránke nižšie.

Platí to aj v prípade, že narazíte na adresu URL priamo, ale Microsoft.Graph aj vtedy, ak používate knižnicu. Nasledujúci kód, ktorý bol spomenutý v predchádzajúcich tipoch, načíta iba 200 výsledkov. Nevyskytnú sa žiadne chyby, ale môžete skontrolovať, či existuje viac ako 201 položiek tak, že skontrolujete,DriveItemCollectionResponse.OdataNextLink či je nastavená hodnota vlastnosti.

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

Ak ho chcete získať prostredníctvom požiadavky HTTP, musíte získať prístup k adrese URL jedného po druhom, @odata.nextLink aby ste ho získali. Microsoft.Graph Ak používate knižnicu, existuje jednoduchší spôsob, ako získať všetkých viac ako 200 položiek. PageIterator Existuje trieda s názvom , takže ju stačí použiť. Použite ho nasledovne:

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

Po získaní odpovede zoznamu položiek priečinka (DriveItemCollectionResponse) PageIterator.CreatePageIterator Zadajte ho ako druhý argument metódy. Tretím argumentom je spätné volanie, ktoré sa volá na základe jednotlivých položiek, takže ak ho uvediete, mali by ste byť schopní získať všetky položky.

PageIterator.CreatePageIterator Mimochodom, je to len generovanie iterácie, takže musíme zavolať metódu na konci PageIterator.IterateAsync .