Comparteix a través de


Eliminación y restauración de un contenedor de blobs con .NET

En este artículo se muestra cómo eliminar contenedores con la biblioteca cliente de Azure Storage para .NET. Si ha habilitado la eliminación temporal de contenedores, puede restaurar los contenedores eliminados.

Requisitos previos

Configurar el entorno

Si no tiene un proyecto existente, esta sección le muestra cómo configurar un proyecto para que funcione con la biblioteca de clientes Azure Blob Storage para .NET. Los pasos incluyen la instalación del paquete, la adición de directivas using y la creación de un objeto cliente autorizado. Para más información, consulte Introducción a Azure Blob Storage y .NET.

Instalar paquetes

En el directorio del proyecto, instale los paquetes para las bibliotecas cliente de Azure Blob Storage y Azure Identity mediante el comando dotnet add package. El paquete Azure.Identity es necesario para las conexiones sin contraseña a los servicios de Azure.

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

Agregue directivas using.

Agregue estas directivas using al principio del archivo de código:

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

Algunos ejemplos de código de este artículo pueden requerir directivas using adicionales.

Creación de un objeto de cliente

Para conectar una aplicación a Blob Storage, cree una instancia de BlobServiceClient. En el ejemplo siguiente se muestra cómo crear un objeto de cliente mediante DefaultAzureCredential para la autorización:

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

    return client;
}

También puede registrar un cliente de servicio para la inserción de dependencias en una aplicación .NET. Para obtener más información sobre cómo crear y administrar objetos de cliente, consulte Crear y administrar objetos de cliente que interactúan con los recursos de datos.

Authorization

El mecanismo de autorización debe tener los permisos necesarios para eliminar o restaurar un contenedor. Para la autorización con Microsoft Entra ID (recomendado) se necesita el rol integrado de RBAC de Azure de Colaborador de datos de Storage Blob o superior. Para obtener más información, consulte la guía de autorización para la Eliminación de un contenedor (API de REST) y la Restauración de un contenedor (API de REST).

Eliminación de un contenedor

Para eliminar un contenedor de .NET, use uno de los métodos siguientes:

Los métodos Delete y DeleteAsync inician una excepción si el contenedor no existe.

Los métodos DeleteIfExists y DeleteIfExistsAsync devuelven un valor booleano que indica si se ha eliminado el contenedor. Si el contenedor especificado no existe, estos métodos devuelven False para indicar que el contenedor no se ha eliminado.

Después de eliminar un contenedor, no se puede crear otro con el mismo nombre durante al menos 30 segundos. Un intento de crear un contenedor con el mismo nombre producirá un error con el código de error de HTTP 409 (conflicto). Cualquier otra operación en el contenedor o en los blobs que contiene producirá un error con el código de error HTTP 404 (no encontrado).

En el ejemplo siguiente se elimina el contenedor especificado y se controla la excepción si el contenedor no existe:

//-------------------------------------------------
// 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();
    }
}

En el ejemplo siguiente se muestra cómo eliminar todos los contenedores que comienzan con un prefijo especificado.

//-------------------------------------------------
// 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;
    }
}

Restauración de un contenedor eliminado

Cuando la eliminación temporal de contenedores está habilitada para una cuenta de almacenamiento, un contenedor y su contenido se pueden recuperar después de eliminarse, dentro de un período de retención especificado. Puede restaurar un contenedor eliminado temporalmente llamando a cualquiera de los métodos siguientes de la clase BlobServiceClient.

En el ejemplo siguiente se busca un contenedor eliminado, se obtiene el id. de versión de ese contenedor eliminado y, a continuación, se pasa ese identificador al método UndeleteBlobContainerAsync para restaurar el contenedor.

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);
            }
        }
    }
}

Recursos

Para más información sobre cómo eliminar un contenedor con la biblioteca cliente de Azure Blob Storage para .NET, consulte los recursos siguientes.

Operaciones de API REST

El SDK de Azure para .NET contiene bibliotecas que se crean a partir de la API REST de Azure, lo que le permite interactuar con las operaciones de API REST a través de paradigmas conocidos de .NET. Los métodos de la biblioteca cliente para eliminar o restaurar un contenedor usan esta operación de API REST:

Recursos de la biblioteca cliente

Consulte también