Một cách tiếp cận dựa trên truy vấn có thể được xem xét trong vấn đề này. Kể từ khi thiết kế bởi DriveItem.name
tài sản là duy nhất trong một thư mục, truy vấn sau đây cho thấy làm thế nào để lọc driveItem
theo tên để xác định xem ổ đĩa mục tồn tại:
https://graph.microsoft.com/v1.0/me/drive/items/{parent-item-id}/children?$filter=name eq '{folder-name}'
có thể được biểu diễn trong C # như thế này:
var items = await graphClient
.Me
.Drive
.Items[parentFolderId]
.Children
.Request()
.Filter($"name eq '{folderName}'")
.GetAsync();
Với điểm cuối được cung cấp, luồng có thể bao gồm các bước sau:
- gửi yêu cầu để xác định xem một thư mục có tên đã tồn tại chưa
- gửi thư thứ hai nếu không tìm thấy thư mục (hoặc trả lại thư mục hiện có)
Thí dụ
Dưới đây là một ví dụ cập nhật
//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);
}