Verwenden Sie die OneDrive-API, um mehr als 200 Elemente in einem Ordner aufzulisten
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 .