ใช้ 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