Se podría considerar un enfoque basado en consultas a este respecto. Dado que la DriveItem.namepropiedad por diseño es única dentro de una carpeta, la siguiente consulta muestra cómo filtrar driveItempor nombre para determinar si existe un elemento de unidad:
https://graph.microsoft.com/v1.0/me/drive/items/{parent-item-id}/children?$filter=name eq '{folder-name}'
que podría representarse en C # así:
var items = await graphClient
.Me
.Drive
.Items[parentFolderId]
.Children
.Request()
.Filter($"name eq '{folderName}'")
.GetAsync();
Dado el punto final proporcionado, el flujo podría consistir en los siguientes pasos:
- enviar una solicitud para determinar si ya existe una carpeta con un nombre de pila
- envíe una segunda si no se encontró la carpeta (o devuelva una carpeta existente)
Ejemplo
Aquí hay un ejemplo actualizado
//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);
}