Pokud máte pouze storage account (CloudBlobClient) a URI blobu v něm, není úplně jednoduché existenci blobu ověřit. Přesněji řečeno při touze použít obvyklou metodu ICloudBlob.Exists(), musíte mít na daný blob referenci. Pro její získání z URI je tu metoda CloudBlobClient.GetBlobReferenceFromServer(Uri blobUri), která však při svém zavolání dělá HEAD request na blob a snaží se dotáhnout jeho metadata. Pokud blob neexistuje, vyhodí už tato metoda výjimku a na nějaké Exists() se už ani nedostane.
Výjimku lze zachytit s pěkným pattern-matchingem:
ICloudBlob blob;
try
{
blob = blobClient.GetBlobReferenceFromServer(new Uri(url));
}
catch (Microsoft.WindowsAzure.Storage.StorageException ex)
when ((ex.InnerException is System.Net.WebException wex)
&& (wex.Response is System.Net.HttpWebResponse httpWebResponse)
&& (httpWebResponse.StatusCode == System.Net.HttpStatusCode.NotFound))
{
// blob does not exist, do whatever you need here
return null;
}
// further code able to use the blob-reference
Pokud s referencí na blob nepotřebujete dále pracovat, tak samozřejmě můžete jeho existenci ověřit vlastním jednoduchým HTTP HEAD requestem z libovolného HTTP klienta.
Každopádně je zde obskurní už to, že máte na daný blob pouze plné URL. Za příčetných okolností byste měli mít k dispozici strukturovanou informaci o názvu containeru a blobu v něm, což by šlo samozřejmě z URL i vyparsovat.