Die Graph-API bietet eine Suchfunktion , mit der Sie herausfinden können, ob ein Element vorhanden ist. Sie haben entweder die Möglichkeit, zuerst die Suche auszuführen und dann ein Element zu erstellen, wenn nichts gefunden wurde, oder Sie können die von @ Matt.G vorgeschlagenennameAlreadyExists
Ausnahmen ausführen und herumspielen :
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
}
}
Der Abfragetext, der zum Suchen nach Elementen verwendet wird. Die Werte können über mehrere Felder hinweg abgeglichen werden, einschließlich Dateiname, Metadaten und Dateiinhalt.
Sie können mit Suchanfragen spielen und Dinge wie filename=<yourName>
Dateitypen tun oder möglicherweise untersuchen (was in Ihrem speziellen Fall vermutlich nicht hilfreich sein wird, aber ich würde es der Vollständigkeit halber erwähnen).
So erhalten Sie den Ordner mit dem Ordnernamen:
call graph api Referenz1 Referenz2 :
/me/drive/items/{item-id}:/path/to/file
dh
/drive/items/id-of-folder-I-am-putting-this-into:/{folderName}
Wenn der Ordner vorhanden ist, wird eine driveItem- Antwort mit der ID zurückgegeben
Wenn der Ordner nicht vorhanden ist, wird ein 404 (NotFound) zurückgegeben.
Wenn der Ordner beim Erstellen eines Ordners bereits vorhanden ist, versuchen Sie, zusätzliche Daten wie folgt festzulegen , um den Aufruf fehlzuschlagen. Referenz :
quelle
Diesbezüglich könnte ein abfragebasierter Ansatz in Betracht gezogen werden. Da die
DriveItem.name
Eigenschaft by design innerhalb eines Ordners eindeutig ist, zeigt die folgende Abfrage, wie nachdriveItem
Namen gefiltert wird, um festzustellen, ob ein Laufwerkselement vorhanden ist:die in C # so dargestellt werden könnte:
Bei dem angegebenen Endpunkt kann der Fluss aus den folgenden Schritten bestehen:
Beispiel
Hier ist ein aktualisiertes Beispiel
quelle
Sie können die ID des Ordners erhalten, indem Sie Folgendes aufrufen :
https://graph.microsoft.com/v1.0/me/drive/root/children
. Sie erhalten alle Elemente im Laufwerk. Sie können den Namen oder eine andere Eigenschaft verwenden, um Ihre Ergebnisse zu filtern und die Ordner-ID abzurufen, falls Sie diese noch nicht habenWenn der Elementtyp im Laufwerk ein Ordner ist, erhält er eine
folder
Eigenschaft. Sie können überprüfen, ob diese Eigenschaft vorhanden ist und ob Ihr Code zum Hinzufügen des Elements ausgeführt wird.quelle