쿼리 기반의 접근 방식은 이 점에서 고려 될 수있다. 설계 기준으로 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);
}