ตามแนวทางแบบสอบถามอาจจะพิจารณาในเรื่องนี้ เนื่องจาก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);
}