De OneDrive-API gebruiken om meer dan 200 items in een map op te sommen
Werkomgeving
- Visuele Studio
-
- Visuele Studio 2022
- .NET
-
- .NET 8
- API voor Microsoft-verificatie
-
- 2.0 OAuth 2
- Microsoft OneDrive-API
-
- 1.0
- Microsoft.Graph
-
- 5.68.0
- Typen Microsoft-accounts
-
- Werk- of schoolaccount
Voorwaarden
- Visuele Studio
-
- Een van de versies
- .NET
-
- Een van de versies
- API voor Microsoft-verificatie
-
- 2.0 OAuth 2
- Microsoft OneDrive-API
-
- 1.0
- Microsoft.Graph
-
- 5.XX
- Typen Microsoft-accounts
-
- Werk- of schoolaccount
Het maximale aantal items dat tegelijk kan worden opgehaald
Bij het ophalen van de inhoud van een map met de OneDrive-API is het maximale aantal dat tegelijk kan worden opgehaald 200. Dit cijfer is ook te vinden op de officiële website hieronder.
Dit geldt zelfs als u rechtstreeks op de URL klikt, maar Microsoft.Graph
ook als u de bibliotheek gebruikt.
De volgende code, die in de vorige tips werd genoemd, haalt maximaal 200 resultaten op.
Er zullen geen fouten optreden,DriveItemCollectionResponse.OdataNextLink
maar u kunt controleren of er meer dan 201 items zijn door te controleren of de waarde van de eigenschap is ingesteld.
// フォルダ内アイテム一覧取得
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}");
}
Als u het via een HTTP-verzoek wilt ontvangen, moet u @odata.nextLink
de URL van één voor één openen om het te krijgen.
Microsoft.Graph
Als u de bibliotheek gebruikt, is er een eenvoudigere manier om alle meer dan 200 items te krijgen.
PageIterator
Er is een klasse genaamd , dus het enige wat je hoeft te doen is het te gebruiken. Gebruik het als volgt:
// フォルダ内アイテム一覧取得
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();
Zodra u de reactie op de lijst met mapitems krijgt (DriveItemCollectionResponse
)
PageIterator.CreatePageIterator
Geef het op als het tweede argument van de methode.
Het derde argument is een callback, die per item wordt aangeroepen, dus als je het opsomt, zou je alle items moeten kunnen krijgen.
PageIterator.CreatePageIterator
Trouwens, het is gewoon het genereren van een iteratie, dus we moeten de methode aan het einde PageIterator.IterateAsync
aanroepen.