A API do Graph fornece um recurso de pesquisa que você pode utilizar para descobrir se existe um item. Você tem a opção de executar a pesquisa primeiro e depois criar um item se nada for encontrado, ou você pode fazer o que o Matt.G sugere e brincar com a nameAlreadyExists
exceção:
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
}
}
O texto da consulta usado para procurar itens. Os valores podem corresponder a vários campos, incluindo nome do arquivo, metadados e conteúdo do arquivo.
você pode brincar com a consulta de pesquisa e fazer coisas como filename=<yourName>
ou potencialmente examinar os tipos de arquivo (o que eu acho que não vai ajudar no seu caso particular, mas eu mencionaria isso por uma questão de integridade)
Para obter a pasta com o nome da pasta:
call graph api Referência1 Referência2 :
/me/drive/items/{item-id}:/path/to/file
ie
/drive/items/id-of-folder-I-am-putting-this-into:/{folderName}
Se a pasta existir, ela retornará uma resposta driveItem , que possui o ID
Se a pasta não existir, ela retornará um 404 (NotFound)
Agora, ao criar uma pasta, se a pasta já existir, para falhar na chamada, tente definir dados adicionais da seguinte maneira Referência :
fonte
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 filtrardriveItem
por nome para determinar se o item da unidade existe:que poderia ser representado em C # assim:
Dado o terminal fornecido, o fluxo pode consistir nas seguintes etapas:
Exemplo
Aqui está um exemplo atualizado
fonte
Você pode obter o ID da pasta chamando este:
https://graph.microsoft.com/v1.0/me/drive/root/children
. Ele fornecerá todos os itens da unidade. Você pode usar o nome ou outra propriedade para filtrar seus resultados e obter o ID da pasta, se ainda não o tiver.Se o tipo de item na unidade for uma pasta, ela obterá uma
folder
propriedade. Você pode verificar se essa propriedade existe e se executa seu código para adicionar o item.fonte