שימוש ב- API של OneDrive כדי לספור יותר מ- 200 פריטים בתיקיה

עודכן דף :
תאריך יצירת דף :

סביבת הפעלה

Visual Studio
  • Visual Studio 2022
.רשת
  • .NET 8
API של אימות Microsoft
  • 2.0 OAuth 2
Microsoft OneDrive API
  • 1.0
Microsoft.Graph
  • 5.68.0
סוגי חשבונות Microsoft
  • חשבון בעבודה או בבית ספר

דרישות מוקדמות

Visual Studio
  • אחת הגרסאות
.רשת
  • אחת הגרסאות
API של אימות Microsoft
  • 2.0 OAuth 2
Microsoft OneDrive API
  • 1.0
Microsoft.Graph
  • 5.XX
סוגי חשבונות Microsoft
  • חשבון בעבודה או בבית ספר

המספר המרבי של פריטים שניתן לאחזר בו-זמנית

בעת אחזור התוכן של תיקיה באמצעות ה- API של OneDrive, המספר המרבי שניתן לאחזר בו זמנית הוא 200. נתון זה ניתן למצוא גם באתר הרשמי להלן.

זה נכון גם אם אתה לוחץ על כתובת האתר ישירות, אבל Microsoft.Graph גם אם אתה משתמש בספרייה. הקוד הבא, שהוזכר בעצות הקודמות, מאחזר רק עד 200 תוצאות. לא יתרחשו שגיאות,DriveItemCollectionResponse.OdataNextLink אך באפשרותך לבדוק אם קיימים יותר מ- 201 פריטים על-ידי בדיקה אם ערך המאפיין מוגדר.

// フォルダ内アイテム一覧取得
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 צריך לגשת לכתובת האתר של אחד אחד כדי לקבל את זה. 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 .