Verwenden Sie die OneDrive-API, um mehr als 200 Elemente in einem Ordner aufzulisten

Diese Seite wurde aktualisiert :
Erstellungsdatum der Seite :

Betriebsumgebung

Visuelles Studio
  • Visual Studio 2022
.NETTO
  • .NET 8
Microsoft-Authentifizierungs-API
  • 2.0 OAuth 2
Microsoft OneDrive-API
  • 1.0
Microsoft.Graph
  • 5.68.0
Arten von Microsoft-Konten
  • Geschäfts-, Schul- oder Unikonto

Voraussetzungen

Visuelles Studio
  • Eine der Varianten
.NETTO
  • Eine der Varianten
Microsoft-Authentifizierungs-API
  • 2.0 OAuth 2
Microsoft OneDrive-API
  • 1.0
Microsoft.Graph
  • 5.XX
Arten von Microsoft-Konten
  • Geschäfts-, Schul- oder Unikonto

Die maximale Anzahl von Elementen, die gleichzeitig abgerufen werden können

Beim Abrufen des Inhalts eines Ordners mit der OneDrive-API beträgt die maximale Anzahl, die gleichzeitig abgerufen werden kann, 200. Diese Zahl finden Sie auch auf der offiziellen Website unten.

Dies gilt auch dann, wenn Sie direkt auf die URL klicken, aber Microsoft.Graph auch, wenn Sie die Bibliothek verwenden. Der folgende Code, der in den vorherigen Tipps erwähnt wurde, ruft nur bis zu 200 Ergebnisse ab. Es treten keine Fehler auf, aber Sie können überprüfen, ob mehr als 201 Elemente vorhanden sind, indem Sie überprüfen,DriveItemCollectionResponse.OdataNextLink ob der Wert der Eigenschaft festgelegt ist.

// フォルダ内アイテム一覧取得
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}");
}

Wenn Sie es per HTTP-Anfrage abrufen möchten, müssen Sie @odata.nextLink nacheinander auf die URL zugreifen, um es zu erhalten. Microsoft.Graph Wenn Sie die Bibliothek verwenden, gibt es eine einfachere Möglichkeit, alle mehr als 200 Elemente abzurufen. PageIterator Es gibt eine Klasse namens , also müssen Sie sie nur verwenden. Verwenden Sie es wie folgt:

// フォルダ内アイテム一覧取得
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();

Sobald Sie die Antwort auf die Ordnerelementliste erhalten (DriveItemCollectionResponse) PageIterator.CreatePageIterator Geben Sie es als zweites Argument der Methode an. Das dritte Argument ist ein Callback, der für jedes einzelne Element aufgerufen wird. Wenn Sie es also auflisten, sollten Sie in der Lage sein, alle Elemente abzurufen.

PageIterator.CreatePageIterator Übrigens, generiert nur eine Iteration, also müssen wir die Methode am Ende PageIterator.IterateAsync aufrufen .