استخدام واجهة برمجة تطبيقات OneDrive لتعداد أكثر من 200 عنصر في مجلد

تحديث الصفحة :
تاريخ إنشاء الصفحة :

بيئة التشغيل

استوديو مرئي
  • برنامج Visual Studio 2022
.صافي
  • .NET 8
واجهة برمجة تطبيقات مصادقة Microsoft
  • 2.0 OAuth 2
واجهة برمجة تطبيقات Microsoft OneDrive
  • 1.0
Microsoft.Graph
  • 5.68.0
أنواع حسابات Microsoft
  • حساب العمل أو المؤسسة التعليمية

المتطلبات المسبقه

استوديو مرئي
  • أحد الإصدارات
.صافي
  • أحد الإصدارات
واجهة برمجة تطبيقات مصادقة Microsoft
  • 2.0 OAuth 2
واجهة برمجة تطبيقات Microsoft OneDrive
  • 1.0
Microsoft.Graph
  • 5.XX
أنواع حسابات Microsoft
  • حساب العمل أو المؤسسة التعليمية

الحد الأقصى لعدد العناصر التي يمكن استردادها في وقت واحد

عند استرداد محتويات مجلد باستخدام واجهة برمجة تطبيقات OneDrive، يكون الحد الأقصى للعدد الذي يمكن استرداده في وقت واحد هو 200. يمكن أيضا العثور على هذا الرقم على الموقع الرسمي أدناه.

هذا صحيح حتى إذا قمت بالضغط على عنوان URL مباشرة ، ولكن 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 بحاجة إلى الوصول إلى عنوان 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 .