Поделиться через


Удаление и восстановление контейнера BLOB-объектов с помощью .NET

В этой статье приводятся сведения об удалении и восстановлении контейнеров с помощью клиентской библиотеки службы хранилища Azure для .NET. Если вы включили обратимое удаление контейнера, можно восстановить удаленные контейнеры.

Необходимые компоненты

Настройка среды

Если у вас нет существующего проекта, в этом разделе показано, как настроить проект для работы с клиентской библиотекой Хранилище BLOB-объектов Azure для .NET. Ниже приведены шаги по установке пакета, добавлению using директив и созданию авторизованного клиентского объекта. Дополнительные сведения см. в статье "Начало работы с Хранилище BLOB-объектов Azure и .NET".

Установка пакетов

В каталоге проекта установите пакеты для клиентских библиотек Хранилище BLOB-объектов Azure и удостоверений Azure с помощью dotnet add package команды. Пакет Azure.Identity необходим для бессерверных подключений к службам Azure.

dotnet add package Azure.Storage.Blobs
dotnet add package Azure.Identity

Добавьте директивы using.

Добавьте эти using директивы в начало файла кода:

using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;

Для некоторых примеров кода в этой статье могут потребоваться дополнительные using директивы.

Создание клиентского объекта

Чтобы подключить приложение к хранилищу BLOB-объектов, создайте экземпляр BLOBServiceClient. В следующем примере показано, как создать клиентский объект с помощью DefaultAzureCredential авторизации:

public BlobServiceClient GetBlobServiceClient(string accountName)
{
    BlobServiceClient client = new(
        new Uri($"https://{accountName}.blob.core.windows.net"),
        new DefaultAzureCredential());

    return client;
}

Вы можете зарегистрировать клиент службы для внедрения зависимостей в приложении .NET.

Вы также можете создавать клиентские объекты для определенных контейнеров или больших двоичных объектов. Дополнительные сведения о создании клиентских объектов и управлении ими см. в статье "Создание клиентских объектов и управление ими", взаимодействующих с ресурсами данных.

Авторизация

Механизм авторизации должен иметь необходимые разрешения для удаления или восстановления контейнера. Для авторизации с помощью идентификатора Microsoft Entra (рекомендуется), требуется встроенный участник данных хранилища BLOB-объектов хранилища ролей или более поздней версии. Дополнительные сведения см. в руководстве по авторизации для удаления контейнера (REST API) и восстановления контейнера (REST API).

Удаление контейнера

Чтобы удалить контейнер в .NET, воспользуйтесь одним из следующих методов:

Методы Delete и DeleteAsync вызывают исключение в случаях, если контейнер не существует.

Методы DeleteIfExists и DeleteIfExistsAsync возвращают логическое значение, указывающее, был ли удален контейнер. Если указанный контейнер не существует, эти методы возвращают значение False, чтобы указать, что контейнер не был удален.

После удаления контейнера вы не сможете создать контейнер с тем же именем в течение как минимум 30 секунд. Попытка создать контейнер с тем же именем завершится ошибкой с кодом ошибки HTTP 409 (конфликт). Любые другие операции с контейнером или содержащимися в нем большими двоичными объектами завершатся сбоем с кодом ошибки HTTP 404 (не найдено).

В рамках нижеприведенного примера удаляется указанный контейнер и обрабатывается исключение в случае, если контейнер не существует:

//-------------------------------------------------
// Delete a container
//-------------------------------------------------
private static async Task DeleteSampleContainerAsync(BlobServiceClient blobServiceClient, string containerName)
{
    BlobContainerClient container = blobServiceClient.GetBlobContainerClient(containerName);

    try
    {
        // Delete the specified container and handle the exception.
        await container.DeleteAsync();
    }
    catch (RequestFailedException e)
    {
        Console.WriteLine("HTTP error code {0}: {1}",
                            e.Status, e.ErrorCode);
        Console.WriteLine(e.Message);
        Console.ReadLine();
    }
}

В нижеприведенном примере показано, как удалить все контейнеры, начинающиеся с указанного префикса.

//-------------------------------------------------
// Delete all containers with the specified prefix
//-------------------------------------------------
private static async Task DeleteContainersWithPrefixAsync(BlobServiceClient blobServiceClient, string prefix)
{
    Console.WriteLine("Delete all containers beginning with the specified prefix");

    try
    {
        foreach (BlobContainerItem container in blobServiceClient.GetBlobContainers())
        {
            if (container.Name.StartsWith(prefix))
            { 
                Console.WriteLine("\tContainer:" + container.Name);
                BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(container.Name);
                await containerClient.DeleteAsync();
            }
        }

        Console.WriteLine();
    }
    catch (RequestFailedException e)
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
        throw;
    }
}

Восстановление удаленного контейнера

Если для учетной записи хранения включено обратимое удаление для контейнера, контейнер и его содержимое можно восстановить после удаления в течение указанного периода хранения. Вы можете восстановить обратимо удаленный контейнер, вызвав любой из следующих методов класса BlobServiceClient .

В следующем примере выполняется поиск удаленного контейнера, возвращается идентификатор версии этого удаленного контейнера, после чего этот идентификатор передается методу UndeleteBlobContainerAsync для восстановления контейнера.

public static async Task RestoreContainer(BlobServiceClient client, string containerName)
{
    await foreach (BlobContainerItem item in client.GetBlobContainersAsync
        (BlobContainerTraits.None, BlobContainerStates.Deleted))
    {
        if (item.Name == containerName && (item.IsDeleted == true))
        {
            try 
            { 
                await client.UndeleteBlobContainerAsync(containerName, item.VersionId);
            }
            catch (RequestFailedException e)
            {
                Console.WriteLine("HTTP error code {0}: {1}",
                e.Status, e.ErrorCode);
                Console.WriteLine(e.Message);
            }
        }
    }
}

Ресурсы

Дополнительные сведения об удалении контейнера с помощью клиентской библиотеки Хранилище BLOB-объектов Azure для .NET см. в следующих ресурсах.

Операции REST API

Пакет SDK Azure для .NET содержит библиотеки, которые создаются на основе REST API Azure, что позволяет взаимодействовать с операциями REST API через знакомые парадигмы .NET. Методы клиентской библиотеки для удаления или восстановления контейнера используют следующие операции REST API:

Ресурсы клиентской библиотеки

См. также

  • Эта статья является частью руководства разработчика хранилища BLOB-объектов для .NET. Дополнительные сведения см. в полном списке статей руководства разработчика по созданию приложения .NET.