Χρήση του 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
.