Brug OneDrive-API'en til at optælle mere end 200 elementer i en mappe
Driftsmiljø
- Visual Studio
-
- Visual Studio 2022
- .NET
-
- .NET 8
- API til Microsoft-godkendelse
-
- 2.0 OAuth 2
- Microsoft OneDrive API
-
- 1.0
- Microsoft.Graph
-
- 5.68.0
- Typer af Microsoft-konti
-
- Arbejds- eller skolekonto
Forudsætninger
- Visual Studio
-
- En af versionerne
- .NET
-
- En af versionerne
- API til Microsoft-godkendelse
-
- 2.0 OAuth 2
- Microsoft OneDrive API
-
- 1.0
- Microsoft.Graph
-
- 5.XX
- Typer af Microsoft-konti
-
- Arbejds- eller skolekonto
Det maksimale antal elementer, der kan hentes på én gang
Når du henter indholdet af en mappe med OneDrive-API'en, er det maksimale antal, der kan hentes på én gang, 200. Dette tal kan også findes på den officielle hjemmeside nedenfor.
Dette gælder, selvom du rammer URL'en direkte, men Microsoft.Graph
også hvis du bruger biblioteket.
Følgende kode, som blev nævnt i de foregående tips, henter kun op til 200 resultater.
Der vil ikke opstå fejl, men du kan kontrollere,DriveItemCollectionResponse.OdataNextLink
om der er mere end 201 elementer ved at kontrollere, om værdien af egenskaben er angivet.
// フォルダ内アイテム一覧取得
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}");
}
Hvis du vil have det via HTTP-anmodning, skal du @odata.nextLink
få adgang til URL'en en efter en for at få det.
Microsoft.Graph
Hvis du bruger biblioteket, er der en nemmere måde at få alle mere end 200 emner på.
PageIterator
Der er en klasse, der hedder , så alt du skal gøre er at bruge den. Brug det som følger:
// フォルダ内アイテム一覧取得
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();
Når du har fået svaret på mappeelementlisten (DriveItemCollectionResponse
)
PageIterator.CreatePageIterator
Angiv det som det andet argument i metoden.
Det tredje argument er et tilbagekald, som kaldes på en vare-for-vare-basis, så hvis du angiver det, bør du være i stand til at få alle elementerne.
PageIterator.CreatePageIterator
Forresten, er bare at generere en iteration, så vi er nødt til at kalde metoden i slutningen PageIterator.IterateAsync
.