از OneDrive API برای شمارش بیش از 200 مورد در یک پوشه استفاده کنید

صفحه به روز شده :
تاریخ ایجاد صفحه :

محیط عملیاتی

ویژوال استودیو
  • ویژوال استودیو 2022
.خالص
  • دات نت 8
API احراز هویت مایکروسافت
  • 2.0 OAuth 2
Microsoft OneDrive API
  • 1.0
مایکروسافت گراف
  • 5.68.0
انواع حساب های مایکروسافت
  • حساب کاری یا تحصیلی

پیش نیازها

ویژوال استودیو
  • یکی از نسخه ها
.خالص
  • یکی از نسخه ها
API احراز هویت مایکروسافت
  • 2.0 OAuth 2
Microsoft OneDrive API
  • 1.0
مایکروسافت گراف
  • 5.XX
انواع حساب های مایکروسافت
  • حساب کاری یا تحصیلی

حداکثر تعداد مواردی که می توان در یک زمان بازیابی کرد

هنگام بازیابی محتویات یک پوشه با OneDrive API، حداکثر تعداد قابل بازیابی در یک زمان 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 آن را به عنوان دومین آرگومان روش مشخص کنید. آرگومان سوم یک callback است که به صورت مورد به آیتم فراخوانی می شود، بنابراین اگر آن را فهرست کنید، باید بتوانید همه موارد را دریافت کنید.

PageIterator.CreatePageIterator به هر حال، فقط یک تکرار ایجاد می کند، بنابراین باید متد را در انتها PageIterator.IterateAsync فراخوانی کنیم.