Graph API menyediakan fasilitas pencarian , yang dapat Anda manfaatkan untuk mencari tahu apakah ada item. Anda memiliki opsi untuk menjalankan pencarian pertama dan kemudian membuat item jika tidak ada yang ditemukan, atau Anda dapat melakukan seperti yang disarankan @ Matt.G dan bermain-main nameAlreadyExists
pengecualian:
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
}
}
Teks kueri yang digunakan untuk mencari item. Nilai dapat dicocokkan di beberapa bidang termasuk nama file, metadata, dan konten file.
Anda dapat bermain dengan permintaan pencarian dan melakukan hal-hal seperti filename=<yourName>
atau berpotensi memeriksa jenis file (yang saya kira tidak akan membantu dalam kasus khusus Anda, tapi saya akan menyebutkannya demi kelengkapan)
Untuk mendapatkan folder dengan nama folder:
sebut grafik api Reference1 Reference2 :
/me/drive/items/{item-id}:/path/to/file
yaitu
/drive/items/id-of-folder-I-am-putting-this-into:/{folderName}
Jika folder ada, ia mengembalikan respons driveItem , yang memiliki id
Jika folder tidak ada, ia mengembalikan 404 (NotFound)
Sekarang, saat membuat folder, jika folder sudah ada, untuk gagal panggilan, coba atur data tambahan sebagai berikut Referensi :
sumber
Sebuah pendekatan berbasis permintaan dapat dipertimbangkan dalam hal ini. Karena
DriveItem.name
properti desain menurut unik dalam folder, kueri berikut ini menunjukkan cara memfilterdriveItem
menurut nama untuk menentukan apakah item drive ada:yang dapat direpresentasikan dalam C # seperti ini:
Mengingat titik akhir yang disediakan, aliran dapat terdiri dari langkah-langkah berikut:
Contoh
Ini adalah contoh yang diperbarui
sumber
Anda bisa mendapatkan ID folder dengan memanggil ini:
https://graph.microsoft.com/v1.0/me/drive/root/children
. Ini akan memberi Anda semua item di drive. Anda dapat menggunakan nama atau properti lain untuk memfilter hasil Anda untuk mendapatkan ID folder jika Anda belum memilikinyaJika jenis item dalam drive adalah folder, ia akan mendapatkan
folder
properti. Anda dapat memeriksa apakah properti ini ada dan apakah menjalankan kode Anda untuk menambahkan item.sumber