Použití rozhraní API OneDrivu k vytvoření výčtu více než 200 položek ve složce

Stránky aktualizovány :
Datum vytvoření stránky :

Provozní prostředí

Vizuální studio
  • Visual Studio 2022
.SÍŤ
  • .NET 8
Rozhraní API pro ověřování společnosti Microsoft
  • 2.0 OAuth 2
Microsoft OneDrive API
  • 1.0
Soubor Microsoft.Graph
  • 5.68.0
Typy účtů Microsoft
  • Pracovní nebo školní účet

Požadavky

Vizuální studio
  • Jedna z verzí
.SÍŤ
  • Jedna z verzí
Rozhraní API pro ověřování společnosti Microsoft
  • 2.0 OAuth 2
Microsoft OneDrive API
  • 1.0
Soubor Microsoft.Graph
  • 5.XX
Typy účtů Microsoft
  • Pracovní nebo školní účet

Maximální počet položek, které lze načíst najednou

Při načítání obsahu složky pomocí rozhraní API OneDrivu je maximální počet, který lze načíst najednou, 200. Tento údaj najdete také na oficiálních stránkách níže.

To platí i v případě, že narazíte přímo na adresu URL, ale Microsoft.Graph také v případě, že používáte knihovnu. Následující kód, který byl zmíněn v předchozích tipech, načte pouze maximálně 200 výsledků. Nedojde k žádným chybám, ale můžete zkontrolovat, zda existuje více než 201 položek, a to tak, že zkontrolujete,DriveItemCollectionResponse.OdataNextLink zda je nastavena 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}");
}

Pokud jej chcete získat pomocí požadavku HTTP, @odata.nextLink musíte k jeho získání přistupovat k adrese URL jednoho po druhém. Microsoft.Graph Pokud používáte knihovnu, existuje jednodušší způsob, jak získat všechny více než 200 položek. PageIterator Existuje třída s názvem , takže ji stačí použít. Použijte jej následovně:

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

Jakmile se zobrazí odpověď seznamu položek složky (DriveItemCollectionResponse) PageIterator.CreatePageIterator Zadejte jej jako druhý argument metody. Třetím argumentem je zpětné volání, které je voláno na základě jednotlivých položek, takže pokud jej uvedete, měli byste být schopni získat všechny položky.

PageIterator.CreatePageIterator Mimochodem, právě generuje iteraci, takže na konci PageIterator.IterateAsync musíme zavolat metodu .