Brug OneDrive-API'en til at optælle mere end 200 elementer i en mappe

Side opdateret :
Dato for oprettelse af side :

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 .