Używanie interfejsu API usługi OneDrive do wyliczania ponad 200 elementów w folderze
Środowisko pracy
- Visual Studio
-
- informacji o wersji Visual Studio 2022
- .SIEĆ
-
- .NET 8
- Interfejs API uwierzytelniania firmy Microsoft
-
- 2.0 Uwierzytelnianie OAuth 2
- Microsoft OneDrive API
-
- 1.0
- Microsoft.Graph (Wykres Microsoftu)
-
- 5.68.0
- Typy kont Microsoft
-
- Konto służbowe
Warunki wstępne
- Visual Studio
-
- Jedna z wersji
- .SIEĆ
-
- Jedna z wersji
- Interfejs API uwierzytelniania firmy Microsoft
-
- 2.0 Uwierzytelnianie OAuth 2
- Microsoft OneDrive API
-
- 1.0
- Microsoft.Graph (Wykres Microsoftu)
-
- 5.XX
- Typy kont Microsoft
-
- Konto służbowe
Maksymalna liczba elementów, które można pobrać jednocześnie
Podczas pobierania zawartości folderu za pomocą interfejsu API usługi OneDrive maksymalna liczba, którą można pobrać jednocześnie, wynosi 200. Figurę tę można również znaleźć na oficjalnej stronie internetowej poniżej.
Dzieje się tak nawet wtedy, gdy trafisz bezpośrednio na adres URL, ale Microsoft.Graph
także jeśli korzystasz z biblioteki.
Poniższy kod, który został wymieniony w poprzednich poradach, pobiera tylko do 200 wyników.
Nie wystąpią żadne błędy, ale możesz sprawdzić, czy jest więcej niż 201 elementów, sprawdzając,DriveItemCollectionResponse.OdataNextLink
czy wartość właściwości jest ustawiona.
// フォルダ内アイテム一覧取得
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}");
}
Jeśli chcesz go uzyskać za pomocą żądania HTTP, musisz @odata.nextLink
uzyskać dostęp do adresu URL jeden po drugim, aby go pobrać.
Microsoft.Graph
Jeśli korzystasz z biblioteki, istnieje łatwiejszy sposób na uzyskanie wszystkich ponad 200 elementów.
PageIterator
Istnieje klasa o nazwie , więc wszystko, co musisz zrobić, to z niej skorzystać. Użyj go w następujący sposób:
// フォルダ内アイテム一覧取得
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();
Po otrzymaniu odpowiedzi z listy elementów folderu (DriveItemCollectionResponse
)
PageIterator.CreatePageIterator
Określ go jako drugi argument metody.
Trzecim argumentem jest wywołanie zwrotne, które jest wywoływane dla każdego elementu, więc jeśli go wystawisz, powinieneś być w stanie pobrać wszystkie elementy.
PageIterator.CreatePageIterator
Nawiasem mówiąc, po prostu generuje iterację, więc musimy wywołać metodę na końcu PageIterator.IterateAsync
.