De OneDrive-API gebruiken om meer dan 200 items in een map op te sommen

Pagina bijgewerkt :
Aanmaakdatum van pagina :

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.