Uma abordagem baseada em consulta pode ser considerada a esse respeito. Como a DriveItem.name
propriedade by design é exclusiva em uma pasta, a consulta a seguir demonstra como filtrar driveItem
por nome para determinar se o item da unidade existe:
https://graph.microsoft.com/v1.0/me/drive/items/{parent-item-id}/children?$filter=name eq '{folder-name}'
que poderia ser representado em C # assim:
var items = await graphClient
.Me
.Drive
.Items[parentFolderId]
.Children
.Request()
.Filter($"name eq '{folderName}'")
.GetAsync();
Dado o terminal fornecido, o fluxo pode consistir nas seguintes etapas:
- envie uma solicitação para determinar se uma pasta com um determinado nome já existe
- envie uma segunda se a pasta não for encontrada (ou retorne uma pasta existente)
Exemplo
Aqui está um exemplo atualizado
//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);
}