Używanie interfejsu API usługi OneDrive do wyliczania ponad 200 elementów w folderze

Strona zaktualizowana :
Data utworzenia strony :

Ś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 .