Използване на API на OneDrive за изброяване на повече от 200 елемента в папка
Работна среда
- Визуално студио
-
- Visual Studio 2022
- .НЕТЕН
-
- .NET 8
- API за удостоверяване на Microsoft
-
- 2.0 OAuth 2
- Microsoft OneDrive API
-
- 1.0
- Microsoft.Graph
-
- 5.68.0
- Типове акаунти в Microsoft
-
- Служебен или училищен профил
Предпоставки
- Визуално студио
-
- Една от версиите
- .НЕТЕН
-
- Една от версиите
- API за удостоверяване на Microsoft
-
- 2.0 OAuth 2
- Microsoft OneDrive API
-
- 1.0
- Microsoft.Graph
-
- 5.XX
- Типове акаунти в Microsoft
-
- Служебен или училищен профил
Максималният брой елементи, които могат да бъдат извлечени наведнъж
Когато извличате съдържанието на папка с API на OneDrive, максималният брой, който може да бъде извлечен наведнъж, е 200. Тази цифра може да бъде намерена и на официалния уебсайт по-долу.
Това е вярно дори ако натиснете URL адреса директно, но Microsoft.Graph
също и ако използвате библиотеката.
Следващият код, който беше споменат в предишните съвети, извлича само до 200 резултата.
Няма да възникнат грешки, но можете да проверите дали има повече от 201 елемента,DriveItemCollectionResponse.OdataNextLink
като проверите дали стойността на свойството е зададена.
// フォルダ内アイテム一覧取得
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}");
}
Ако искате да го получите чрез HTTP заявка, @odata.nextLink
трябва да получите достъп до URL адреса на един по един, за да го получите.
Microsoft.Graph
Ако използвате библиотеката, има по-лесен начин да получите всички повече от 200 елемента.
PageIterator
Има клас, наречен , така че всичко, което трябва да направите, е да го използвате. Използвайте го както следва:
// フォルダ内アイテム一覧取得
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();
След като получите отговора на списъка с елементи на папката (DriveItemCollectionResponse
)
PageIterator.CreatePageIterator
Посочете го като втори аргумент на метода.
Третият аргумент е обратно извикване, което се извиква на база елемент по елемент, така че ако го изброите, трябва да можете да получите всички елементи.
PageIterator.CreatePageIterator
Между другото, просто генерира итерация, така че трябва да извикаме метода в края PageIterator.IterateAsync
.