Utiliser l’API OneDrive pour énumérer plus de 200 éléments dans un dossier

Page mise à jour :
Date de création de la page :

Environnement d’exploitation

Studio visuel
  • Visual Studio 2022
.FILET
  • .NET 8
API d’authentification Microsoft
  • 2.0 OAuth 2
Microsoft OneDrive API
  • 1.0
Microsoft.Graph
  • 5.68.0
Types de comptes Microsoft
  • Compte professionnel ou scolaire

Conditions préalables

Studio visuel
  • L’une des versions
.FILET
  • L’une des versions
API d’authentification Microsoft
  • 2.0 OAuth 2
Microsoft OneDrive API
  • 1.0
Microsoft.Graph
  • 5.XX
Types de comptes Microsoft
  • Compte professionnel ou scolaire

Le nombre maximal d’éléments pouvant être récupérés en même temps

Lors de la récupération du contenu d’un dossier avec l’API OneDrive, le nombre maximal pouvant être récupéré à la fois est de 200. Ce chiffre peut également être trouvé sur le site officiel ci-dessous.

Cela est vrai même si vous frappez l’URL directement, mais Microsoft.Graph aussi si vous utilisez la bibliothèque. Le code suivant, qui a été mentionné dans les conseils précédents, ne récupère que jusqu’à 200 résultats. Aucune erreur ne se produira,DriveItemCollectionResponse.OdataNextLink mais vous pouvez vérifier s’il y a plus de 201 éléments en vérifiant si la valeur de la propriété est définie.

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

Si vous souhaitez l’obtenir par requête HTTP, vous @odata.nextLink devez accéder à l’URL d’un par un pour l’obtenir. Microsoft.Graph Si vous utilisez la bibliothèque, il existe un moyen plus simple d’obtenir plus de 200 articles. PageIterator Il existe une classe appelée , donc tout ce que vous avez à faire est de l’utiliser. Utilisez-le comme suit :

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

Une fois que vous obtenez la réponse de la liste des éléments de dossier (DriveItemCollectionResponse) PageIterator.CreatePageIterator Spécifiez-le comme deuxième argument de la méthode. Le troisième argument est un rappel, qui est appelé élément par élément, donc si vous le répertoriez, vous devriez être en mesure d’obtenir tous les éléments.

PageIterator.CreatePageIterator Soit dit en passant, il ne s’agit que de générer une itération, nous devons donc appeler la méthode à la fin PageIterator.IterateAsync .