Utiliser l’API OneDrive pour énumérer plus de 200 éléments dans un dossier
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
.