किसी फ़ोल्डर में 200 से अधिक आइटम्स की गणना करने के लिए OneDrive API का उपयोग करें
परिचालन का वातावरण
- विजुअल स्टूडियो
-
- विजुअल स्टूडियो 2022
- ।जाल
-
- .नेट 8
- Microsoft प्रमाणीकरण API
-
- 2.0 ओथ 2
- माइक्रोसॉफ्ट OneDrive API
-
- 1.0
- माइक्रोसॉफ्ट.ग्राफ
-
- 5.68.0
- Microsoft खातों के प्रकार
-
- कार्यस्थल या विद्यालय खाता
आवश्यकताएँ
- विजुअल स्टूडियो
-
- संस्करणों में से एक
- ।जाल
-
- संस्करणों में से एक
- Microsoft प्रमाणीकरण API
-
- 2.0 ओथ 2
- माइक्रोसॉफ्ट OneDrive API
-
- 1.0
- माइक्रोसॉफ्ट.ग्राफ
-
- 5.एक्सएक्स
- 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
में विधि को कॉल करने की आवश्यकता है ।