Sebuah pendekatan berbasis permintaan dapat dipertimbangkan dalam hal ini. Karena DriveItem.nameproperti desain menurut unik dalam folder, kueri berikut ini menunjukkan cara memfilter driveItemmenurut nama untuk menentukan apakah item drive ada:
https://graph.microsoft.com/v1.0/me/drive/items/{parent-item-id}/children?$filter=name eq '{folder-name}'
yang dapat direpresentasikan dalam C # seperti ini:
var items = await graphClient
.Me
.Drive
.Items[parentFolderId]
.Children
.Request()
.Filter($"name eq '{folderName}'")
.GetAsync();
Mengingat titik akhir yang disediakan, aliran dapat terdiri dari langkah-langkah berikut:
- kirim permintaan untuk menentukan apakah folder dengan nama yang diberikan sudah ada
- kirimkan yang kedua jika folder tidak ditemukan (atau kembalikan folder yang ada)
Contoh
Ini adalah contoh yang diperbarui
//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);
}