Graph API proporciona una función de búsqueda que puede utilizar para averiguar si existe un elemento. Tiene la opción de ejecutar la búsqueda primero y luego crear un elemento si no se encuentra nada, o puede hacer lo que @ Matt.G sugiere y jugar con la nameAlreadyExists
excepción:
var driveItem = new DriveItem
{
Name = Customer_Name.Text + Customer_LName.Text,
Folder = new Folder
{
},
AdditionalData = new Dictionary<string, object>()
{
{"@microsoft.graph.conflictBehavior","fail"}
}
};
try
{
driveItem = await graphserviceClient
.Me
.Drive.Root.Children
.Items["id-of-folder-I-am-putting-this-into"]
.Children
.Request()
.AddAsync(driveItem);
}
catch (ServiceException exception)
{
if (exception.StatusCode == HttpStatusCode.Conflict && exception.Error.Code == "nameAlreadyExists")
{
var newFolder = await graphserviceClient
.Me
.Drive.Root.Children
.Items["id-of-folder-I-am-putting-this-into"]
.Search(driveItem.Name) // the API lets us run searches https://docs.microsoft.com/en-us/graph/api/driveitem-search?view=graph-rest-1.0&tabs=csharp
.Request()
.GetAsync();
// since the search is likely to return more results we should filter it further
driveItem = newFolder.FirstOrDefault(f => f.Folder != null && f.Name == driveItem.Name); // Just to ensure we're finding a folder, not a file with this name
Console.WriteLine(driveItem?.Id); // your ID here
}
else
{
Console.WriteLine("Other ServiceException");
throw;// handle this
}
}
El texto de consulta utilizado para buscar elementos. Los valores pueden coincidir en varios campos, incluidos el nombre de archivo, los metadatos y el contenido del archivo.
puedes jugar con la consulta de búsqueda y hacer cosas como filename=<yourName>
examinar potencialmente tipos de archivos (lo que supongo que no va a ayudar en tu caso particular, pero lo mencionaría por completo)
Para obtener la carpeta con el nombre de la carpeta:
llamada gráfica api Referencia1 Referencia2 :
/me/drive/items/{item-id}:/path/to/file
es decir
/drive/items/id-of-folder-I-am-putting-this-into:/{folderName}
Si la carpeta existe, devuelve un respuesta driveItem , que tiene la identificación
Si la carpeta no existe, devuelve un 404 (NotFound)
Ahora, mientras crea una carpeta, si la carpeta ya existe, para fallar la llamada, intente configurar datos adicionales de la siguiente manera Referencia :
fuente
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 filtrardriveItem
por nombre para determinar si existe un elemento de unidad:que podría representarse en C # así:
Dado el punto final proporcionado, el flujo podría consistir en los siguientes pasos:
Ejemplo
Aquí hay un ejemplo actualizado
fuente
Puede obtener el ID de la carpeta llamando a esto:
https://graph.microsoft.com/v1.0/me/drive/root/children
. Le dará todos los elementos en el disco. Puede usar el nombre u otra propiedad para filtrar sus resultados para obtener la ID de la carpeta si aún no la tieneSi el tipo de elemento en la unidad es una carpeta, obtendrá una
folder
propiedad. Puede verificar si esta propiedad existe y si ejecuta su código para agregar el elemento.fuente