.NET ile blob kapsayıcısı silme ve geri yükleme

Bu makalede.NET için Azure Depolama istemci kitaplığıyla kapsayıcıların nasıl silineceği gösterilmektedir. Kapsayıcı geçici silmeyi etkinleştirdiyseniz silinen kapsayıcıları geri yükleyebilirsiniz.

Ön koşullar

  • Bu makalede, .NET için Azure Blob Depolama istemci kitaplığıyla çalışmak üzere ayarlanmış bir projeniz olduğu varsayılır. Paket yükleme, yönergeler ekleme using ve yetkili istemci nesnesi oluşturma dahil olmak üzere projenizi ayarlama hakkında bilgi edinmek için bkz. Azure Blob Depolama ve .NET'i kullanmaya başlama.
  • Yetkilendirme mekanizmasının blob kapsayıcısını silme veya geçici olarak silinen kapsayıcıyı geri yükleme izinleri olmalıdır. Daha fazla bilgi edinmek için aşağıdaki REST API işlemleri için yetkilendirme kılavuzuna bakın:

Kapsayıcı silme

.NET'te bir kapsayıcıyı silmek için aşağıdaki yöntemlerden birini kullanın:

Delete ve DeleteAsync yöntemleri, kapsayıcı yoksa bir özel durum oluşturur.

DeleteIfExists ve DeleteIfExistsAsync yöntemleri, kapsayıcının silinip silinmediğini belirten bir Boole değeri döndürür. Belirtilen kapsayıcı yoksa, bu yöntemler kapsayıcının silinmediğini belirtmek için False döndürür.

Kapsayıcıyı sildikten sonra, en az 30 saniye boyunca aynı ada sahip bir kapsayıcı oluşturamazsınız. Aynı ada sahip bir kapsayıcı oluşturma girişimi HTTP hata kodu 409 (Çakışma) ile başarısız olur. Kapsayıcıdaki veya içerdiği bloblardaki diğer işlemler HTTP hata kodu 404 (Bulunamadı) ile başarısız olur.

Aşağıdaki örnek belirtilen kapsayıcıyı siler ve kapsayıcı yoksa özel durumu işler:

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

Aşağıdaki örnekte, belirtilen ön ekle başlayan tüm kapsayıcıların nasıl silineceği gösterilmektedir.

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

Silinen kapsayıcıyı geri yükleme

Depolama hesabı için kapsayıcı geçici silme etkinleştirildiğinde, kapsayıcı ve içeriği silindikten sonra, belirttiğiniz saklama süresi içinde kurtarılabilir. BlobServiceClient sınıfının aşağıdaki yöntemlerinden birini çağırarak geçici olarak silinen bir kapsayıcıyı geri yükleyebilirsiniz.

Aşağıdaki örnek silinmiş bir kapsayıcıyı bulur, silinen kapsayıcının sürüm kimliğini alır ve ardından kapsayıcıyı geri yüklemek için bu kimliği UndeleteBlobContainerAsync yöntemine geçirir.

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

Kaynaklar

.NET için Azure Blob Depolama istemci kitaplığını kullanarak kapsayıcı silme hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın.

REST API işlemleri

.NET için Azure SDK, Azure REST API'sinin üzerinde derlenmiş kitaplıklar içerir ve tanıdık .NET paradigmalarıyla REST API işlemleriyle etkileşim kurmanızı sağlar. Kapsayıcıyı silmek veya geri yüklemek için istemci kitaplığı yöntemleri aşağıdaki REST API işlemlerini kullanır:

İstemci kitaplığı kaynakları

Ayrıca bkz.