ใช้ OneDrive API เพื่อแจกแจงรายการมากกว่า 200 รายการในโฟลเดอร์

ปรับปรุงหน้า :
วันที่สร้างเพจ :

สภาพแวดล้อมในการทํางาน

วิชวลสตูดิโอ
  • วิชวลสตูดิโอ 2022
ตาข่าย
  • .NET 8
API การรับรองความถูกต้องของ Microsoft
  • 2.0 โอ๊ทัยวต์ 2
Microsoft OneDrive API
  • 1.0
ไมโครซอฟท์.กราฟ
  • 5.68.0
ชนิดของบัญชี Microsoft
  • บัญชีที่ทํางานหรือโรงเรียน

ข้อกําหนดเบื้องต้น

วิชวลสตูดิโอ
  • หนึ่งในเวอร์ชัน
ตาข่าย
  • หนึ่งในเวอร์ชัน
API การรับรองความถูกต้องของ Microsoft
  • 2.0 โอ๊ทัยวต์ 2
Microsoft OneDrive API
  • 1.0
ไมโครซอฟท์.กราฟ
  • 5.XX
ชนิดของบัญชี Microsoft
  • บัญชีที่ทํางานหรือโรงเรียน

จํานวนสูงสุดของรายการที่สามารถเรียกคืนได้ในคราวเดียว

เมื่อดึงเนื้อหาของโฟลเดอร์ด้วย 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 ระบุเป็นอาร์กิวเมนต์ที่สองของเมธอด อาร์กิวเมนต์ที่สามคือการโทรกลับ ซึ่งถูกเรียกตามรายการต่อรายการ ดังนั้นหากคุณแสดงรายการ คุณควรจะสามารถรับรายการทั้งหมดได้

PageIterator.CreatePageIteratorอย่างไรก็ตาม เป็นเพียงการสร้างการวนซ้ํา ดังนั้นเราจึงต้องเรียกเมธอดในตอนท้ายPageIterator.IterateAsync