इस संबंध में एक क्वेरी आधारित दृष्टिकोण पर विचार किया जा सकता है। चूंकि एक फ़ोल्डर के भीतर डिज़ाइन DriveItem.name
प्रॉपर्टी अद्वितीय है, इसलिए निम्न क्वेरी यह दर्शाती है कि driveItem
ड्राइव आइटम मौजूद है या नहीं यह निर्धारित करने के लिए नाम से फ़िल्टर कैसे करें :
https://graph.microsoft.com/v1.0/me/drive/items/{parent-item-id}/children?$filter=name eq '{folder-name}'
जिसे इस तरह से C # में दर्शाया जा सकता है:
var items = await graphClient
.Me
.Drive
.Items[parentFolderId]
.Children
.Request()
.Filter($"name eq '{folderName}'")
.GetAsync();
दिए गए समापन बिंदु को देखते हुए प्रवाह में निम्नलिखित चरण शामिल हो सकते हैं:
- यह निर्धारित करने के लिए एक अनुरोध सबमिट करें कि किसी दिए गए नाम वाला फ़ोल्डर पहले से मौजूद है या नहीं
- यदि फ़ोल्डर नहीं मिला था तो एक दूसरा सबमिट करें (या किसी मौजूदा फ़ोल्डर को वापस करें)
उदाहरण
यहाँ एक अद्यतन उदाहरण है
//1.ensure drive item already exists (filtering by name)
var items = await graphClient
.Me
.Drive
.Items[parentFolderId]
.Children
.Request()
.Filter($"name eq '{folderName}'")
.GetAsync();
if (items.Count > 0) //found existing item (folder facet)
{
Console.WriteLine(items[0].Id); //<- gives an existing DriveItem Id (folder facet)
}
else
{
//2. create a folder facet
var driveItem = new DriveItem
{
Name = folderName,
Folder = new Folder
{
},
AdditionalData = new Dictionary<string, object>()
{
{"@microsoft.graph.conflictBehavior","rename"}
}
};
var newFolder = await graphClient
.Me
.Drive
.Items[parentFolderId]
.Children
.Request()
.AddAsync(driveItem);
}