Použitie rozhrania OneDrive API na vytvorenie zoznamu viac ako 200 položiek v priečinku
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
.