"OneDrive" API naudojimas norint išvardyti daugiau nei 200 elementų aplanke

Puslapis atnaujintas :
Puslapio sukūrimo data :

Darbo aplinka

Vizualinė studija
  • "Visual Studio 2022"
.GRYNOJI
  • .NET 8
"Microsoft" autentifikavimo API
  • 2.0 OAuth 2
"Microsoft OneDrive" API
  • 1.0
Microsoft.Graph
  • 5.68.0
"Microsoft" paskyrų tipai
  • Darbo arba mokymo įstaigos paskyra

Būtinosios sąlygos

Vizualinė studija
  • Viena iš versijų
.GRYNOJI
  • Viena iš versijų
"Microsoft" autentifikavimo API
  • 2.0 OAuth 2
"Microsoft OneDrive" API
  • 1.0
Microsoft.Graph
  • 5.XX
"Microsoft" paskyrų tipai
  • Darbo arba mokymo įstaigos paskyra

Maksimalus elementų, kuriuos galima gauti vienu metu, skaičius

Gaunant aplanko turinį su OneDrive API, maksimalus skaičius, kurį galima gauti vienu metu, yra 200. Šį skaičių taip pat galima rasti žemiau esančioje oficialioje svetainėje.

Tai tiesa, net jei paspausite URL tiesiogiai, bet Microsoft.Graph taip pat jei naudojate biblioteką. Šis kodas, kuris buvo paminėtas ankstesniuose patarimuose, nuskaito tik iki 200 rezultatų. Klaidų nebus, tačiau galite patikrinti,DriveItemCollectionResponse.OdataNextLink ar yra daugiau nei 201 elementas, patikrindami, ar nustatyta turto vertė.

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

Jei norite jį gauti pagal HTTP užklausą, turite pasiekti URL po vieną, @odata.nextLink kad jį gautumėte. Microsoft.Graph Jei naudojate biblioteką, yra paprastesnis būdas gauti visus daugiau nei 200 elementų. PageIterator Yra klasė, vadinama , todėl tereikia ja naudotis. Naudokite jį taip:

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

Kai gausite aplanko elementų sąrašo atsakymą (DriveItemCollectionResponse) PageIterator.CreatePageIterator Nurodykite jį kaip antrąjį metodo argumentą. Trečiasis argumentas yra atgalinis ryšys, kuris iškviečiamas pagal kiekvieną elementą, todėl, jei jį įtrauksite į sąrašą, turėtumėte turėti galimybę gauti visus elementus.

PageIterator.CreatePageIterator Beje, tik generuoja iteraciją, todėl turime paskambinti metodu pabaigoje PageIterator.IterateAsync .