Utilizați API-ul OneDrive pentru a enumera mai mult de 200 de elemente dintr-un folder
Mediul de operare
- Visual Studio
-
- Visual Studio 2022
- .NET
-
- .NET 8
- API de autentificare Microsoft
-
- 2.0 OAuth 2
- API-ul Microsoft OneDrive
-
- 1.0
- Microsoft.Graph
-
- 5.68.0
- Tipuri de conturi Microsoft
-
- Cont de la locul de muncă sau de la școală
Cerințe preliminare
- Visual Studio
-
- Una dintre versiuni
- .NET
-
- Una dintre versiuni
- API de autentificare Microsoft
-
- 2.0 OAuth 2
- API-ul Microsoft OneDrive
-
- 1.0
- Microsoft.Graph
-
- 5.XX
- Tipuri de conturi Microsoft
-
- Cont de la locul de muncă sau de la școală
Numărul maxim de elemente care pot fi preluate simultan
Când preluați conținutul unui folder cu API-ul OneDrive, numărul maxim care poate fi preluat simultan este 200. Această cifră poate fi găsită și pe site-ul oficial de mai jos.
Acest lucru este valabil chiar dacă apăsați adresa URL direct, dar Microsoft.Graph
și dacă utilizați biblioteca.
Următorul cod, care a fost menționat în sfaturile anterioare, preia doar până la 200 de rezultate.
Nu vor apărea erori,DriveItemCollectionResponse.OdataNextLink
dar puteți verifica dacă există mai mult de 201 elemente verificând dacă valoarea proprietății este setată.
// フォルダ内アイテム一覧取得
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}");
}
Dacă doriți să-l obțineți prin cerere HTTP, @odata.nextLink
trebuie să accesați adresa URL una câte una pentru a-l obține.
Microsoft.Graph
Dacă folosești biblioteca, există o modalitate mai ușoară de a obține toate cele peste 200 de articole.
PageIterator
Există o clasă numită , așa că tot ce trebuie să faci este să o folosești. Folosiți-l după cum urmează:
// フォルダ内アイテム一覧取得
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();
Odată ce primiți răspunsul listei de elemente a folderului (DriveItemCollectionResponse
)
PageIterator.CreatePageIterator
Specificați-l ca al doilea argument al metodei.
Al treilea argument este un apel invers, care este apelat articol cu articol, deci dacă îl listați, ar trebui să puteți obține toate elementele.
PageIterator.CreatePageIterator
Apropo, generează doar o iterație, așa că trebuie să apelăm metoda la sfârșit PageIterator.IterateAsync
.