API Graph надає інструмент пошуку , який можна використовувати, щоб дізнатися, чи існує предмет. У вас є або можливість запустити пошук спочатку, а потім створити елемент, якщо нічого не було знайдено, або ви можете зробити так, як @ Matt.G пропонує і пограти у nameAlreadyExists
виняток:
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
}
}
Текст запиту, який використовується для пошуку елементів. Значення можуть бути зібрані в декількох полях, включаючи ім'я файлу, метадані та вміст файлу.
Ви можете грати з пошуковим запитом і робити такі речі, як filename=<yourName>
або потенційно досліджувати типи файлів (що, мабуть, не допоможе у вашому конкретному випадку, але я б зазначив це для повноти)