Azure CloudBlobContainer.CreateIfNotExists () выбрасывает уже существующий контейнер, ошибка с веб-страницей сбоев - PullRequest
0 голосов
/ 02 мая 2019

У меня есть основное приложение asp.net, которое загружает файл в хранилище BLOB-объектов Azure.Выгрузка завершается успешно, но когда CloudBlobContainer вызывает CreateIfNotExistAsync, веб-страница вылетает с сообщением «Ошибка контейнера уже существует».

  var container = BlobClient.GetContainerReference(containerName.ToString().ToLower());

 await container.CreateIfNotExistsAsync();
 return container;

Я попытался использовать переопределение CreateIfNotExistsAsync () со следующим if

if (! await container.ExistsAsync())

, но это все еще ошибки.

Имя контейнера и AccountName = в строке подключения строчные.

Я использую последний стабильный пакет NuGet Microsoft.Azure.Storage.Blob 10.0.2

Я пытался поймать StroageExeception, но исключение не называется

 try
    {
       await container.CreateIfNotExistsAsync();
    }
    catch (StorageException ex)
    {
        Logger.LogError(ex.ToString());
    }

Я прошел все пункты в этом предыдущем вопросе, но ни один из них не применим / не работает в моемсценарий Azure Blob 400 Плохой запрос на создание контейнера

public class CloudBlobStorageProvider : ICloudBlobStorageProvider
{
    private CloudBlobClient BlobClient { get; }
    private ILogger Logger { get; }

    public CloudBlobStorageProvider(IConfiguration configuration, ILogger<CloudBlobStorageProvider> logger)
    {
        var connectionString = configuration.GetConnectionString("AzureStorageAccount");

        if (!CloudStorageAccount.TryParse(connectionString, out CloudStorageAccount storageAccount))
        {
            logger.LogError($"The supplied connection string for Azure blob storage could not be parsed: {connectionString}");
        }

        BlobClient = storageAccount.CreateCloudBlobClient();
    }

    public async Task<CloudBlobContainer> GetContainerAsync(CloudBlobContainerName containerName)
    {

        var container = BlobClient.GetContainerReference(containerName.ToString().ToLower());

        await container.CreateIfNotExistsAsync(BlobContainerPublicAccessType.Off, null, null);

        return container;
    }
}

public interface ICloudBlobStorageProvider
{
    Task<CloudBlobContainer> GetContainerAsync(CloudBlobContainerName containerName);
}

, который вызывается

 public async Task<CloudBlockBlob> UploadServiceUserAttachmentAsync(IFormFile formFile)
    {
        var fileExtenion = RegularExpressionHelpers.GetFileExtension(formFile.FileName);

        string attachmentFileName = (string.IsNullOrEmpty(fileExtenion)) ? $"{Guid.NewGuid().ToString()}" : $"{Guid.NewGuid().ToString()}{fileExtenion}";

        var userAttachmentContainer = await CloudBlobStorageProvider.GetContainerAsync(CloudBlobContainerName.userattachments);

        var blobBlockReference = userAttachmentContainer.GetBlockBlobReference(attachmentFileName);

        try
        {
            using (var stream = formFile.OpenReadStream())
            {
                await blobBlockReference.UploadFromStreamAsync(stream);
                await blobBlockReference.FetchAttributesAsync();
                var blobProperties = blobBlockReference.Properties;
                blobProperties.ContentType = formFile.ContentType;
                await blobBlockReference.SetPropertiesAsync();
            }
        }
        catch (Exception e)
        {
            Logger.LogWarning(e, $"Exception encountered while attempting to write profile photo to blob storage");

        }

        return blobBlockReference;
    }
...