Bir sorgu dayalı yaklaşım bu konuda düşünülebilir. Design DriveItem.name
özelliği bir klasör içinde benzersiz olduğundan, aşağıdaki sorgu, driveItem
sürücü öğesinin olup olmadığını belirlemek için ada göre nasıl filtre uygulanacağını gösterir :
https://graph.microsoft.com/v1.0/me/drive/items/{parent-item-id}/children?$filter=name eq '{folder-name}'
C # ile şu şekilde temsil edilebilir:
var items = await graphClient
.Me
.Drive
.Items[parentFolderId]
.Children
.Request()
.Filter($"name eq '{folderName}'")
.GetAsync();
Sağlanan uç nokta göz önüne alındığında, akış aşağıdaki adımlardan oluşabilir:
- belirli bir ada sahip bir klasörün zaten mevcut olup olmadığını belirlemek için bir istek gönderin
- klasör bulunamazsa ikinci bir klasör gönderin (veya varolan bir klasörü döndürün)
Misal
İşte güncellenmiş bir örnek
//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);
}