/// <summary> /// Creates a BlobContainerClient. Called when one does not exist yet. /// </summary> /// <param name="uri">The target Uri.</param> /// <param name="context">The context.</param> /// <returns> /// A BlobContainerClient object. /// </returns> internal StorageContainerClientSleeve CreateBlobContainerClientForUri( Uri uri, StorageClientProviderContext context) { // set up a copy of the Context... var ctxCopy = new StorageClientProviderContext(context); BlobContainerClient blobContainerClient; BlobUriBuilder containerUriBuilder; BlobClientOptions clientOptions; try { containerUriBuilder = new BlobUriBuilder(uri); clientOptions = new BlobClientOptions(); var clientRequestIdPolicy = new BlobClientPipelinePolicy(ctxCopy); var uriC = StorageHelpers.BuildBlobStorageUri(containerUriBuilder.AccountName, containerUriBuilder.BlobContainerName); blobContainerClient = new BlobContainerClient(uriC, _identity, clientOptions); } catch (Exception fe) when(fe is ArgumentNullException || fe is UriFormatException) { var aex = new ArgumentException(LogEventIds.BlobContainerClientProviderUriMissingAccountName.Name, fe); _log.LogExceptionObject(LogEventIds.BlobContainerClientProviderUriMissingAccountName, aex, uri); throw aex; } catch (Exception e) { _log.LogExceptionObject(LogEventIds.BlobContainerClientProviderFailedToCreateBlobContainerClient, e, uri); throw; } try { var accountUri = StorageHelpers.BuildStorageAccountUri(containerUriBuilder.AccountName, buildForBlobService: true); var sleeve = new StorageContainerClientSleeve(blobContainerClient, new BlobServiceClient(accountUri, _identity, clientOptions), ctxCopy); return(sleeve); } catch (ArgumentException aex) { _log.LogExceptionObject(LogEventIds.BlobContainerClientProviderUriMissingAccountName, aex, uri); throw; } }
/// <summary> /// Creates a BlobClientSleeve (BlobBaseClient + Context). Called when one does not exist yet. /// </summary> /// <param name="blobUri">The target Uri.</param> /// <param name="ctx">The context.</param> /// <returns> /// A BlobBaseClient object. /// </returns> internal StorageBlobClientSleeve CreateBlobClientSleeveForUri(Uri blobUri, StorageClientProviderContext ctx) { BlobBaseClient blobBaseClient; BlobUriBuilder blobUriBuilder; var contextCopy = new StorageClientProviderContext(ctx); var blobClientOptions = new BlobClientOptions(); try { blobUriBuilder = new BlobUriBuilder(blobUri); var clientRequestIdPolicy = new BlobClientPipelinePolicy(contextCopy); blobClientOptions.AddPolicy(clientRequestIdPolicy, HttpPipelinePosition.PerCall); blobBaseClient = new BlobBaseClient(blobUri, _identity, blobClientOptions); } catch (Exception e) { _log.LogExceptionObject(LogEventIds.BlobBaseClientProviderFailedToCreateBlobBaseClient, e, blobUri); throw; } try { // BlobUriBuilder SDK class will just give null for Accountname if URL is malformed, so let flow upwards _ = StringHelpers.NullIfNullOrWhiteSpace(blobUriBuilder.AccountName) ?? throw new UriFormatException($@"Malformed Azure Storage URL: {blobUri}"); var accountUri = StorageHelpers.BuildStorageAccountUri(blobUriBuilder.AccountName, buildForBlobService: true); var newSleeve = new StorageBlobClientSleeve(blobBaseClient, new BlobServiceClient(accountUri, _identity, blobClientOptions), contextCopy); return(newSleeve); } catch (UriFormatException uriex) { _log.LogExceptionObject(LogEventIds.BlobBaseClientProviderUriMissingAccountName, uriex, blobUri); throw new ArgumentException(LogEventIds.BlobBaseClientProviderUriMissingAccountName.Name, nameof(blobUri), uriex); } catch (ArgumentException aex) { _log.LogExceptionObject(LogEventIds.BlobBaseClientProviderUriMissingAccountName, aex, blobUri); throw; } }
/// <summary> /// Creates a BlobContainerClient from a connection string. Called when one does not exist yet. /// </summary> /// <param name="connectionString">Connection string</param> /// <param name="containerName">Container name</param> /// <param name="context">current storage context</param> /// <returns> /// A BlobContainerClient object. /// </returns> internal StorageContainerClientSleeve CreateBlobContainerClientForConnectionString(string connectionString, string containerName, StorageClientProviderContext context) { var ctxCopy = new StorageClientProviderContext(context); BlobContainerClient blobContainerClient; BlobClientOptions clientOptions; try { clientOptions = new BlobClientOptions(); var clientRequestIdPolicy = new BlobClientPipelinePolicy(ctxCopy); blobContainerClient = new BlobContainerClient(connectionString, containerName, clientOptions); } catch (Exception e) { _log.LogExceptionObject(LogEventIds.BlobContainerClientProviderFailedToCreateBlobContainerClient, e, new { connectionString, containerName }); throw; } return(new StorageContainerClientSleeve(blobContainerClient, new BlobServiceClient(connectionString, clientOptions), ctxCopy)); }