Se podría considerar un enfoque basado en consultas a este respecto. Dado que la DriveItem.name
propiedad por diseño es única dentro de una carpeta, la siguiente consulta muestra cómo filtrar driveItem
por 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);
}