Použití rozhraní API OneDrivu k vytvoření výčtu více než 200 položek ve složce
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 .