首页 > 解决方案 > 在 ASP.net Core 中删除容器后强制垃圾回收 Azure Blobstorage

问题描述

我有以下代码来删除 Azure Blobstorage 上的容器:

        public IActionResult DeleteDownloadLink(string container)
    {
        var connectionString = _configuration["StorageConnectionString"];
        BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);
        BlobContainerClient blobContainer = blobServiceClient.GetBlobContainerClient(container);

        _moduleRepository.DeleteDownloadLink(container);

            blobContainer.Delete();
            return RedirectToAction("ManageDownloadLinks", "Admin");
    }

这不会立即删除容器,我在文档中找到了以下内容:

成功删除 Blob 后,它会立即从存储帐户的索引中删除,并且客户端无法再访问。Blob 的数据稍后会在垃圾收集期间从服务中删除。

但是,我仍然可以转到链接并下载它。不返回错误。所以我想我有两个问题:

  1. 我的删除代码有问题吗?

  2. 如果代码没有问题,我可以强制垃圾收集以使链接不再可访问吗?

标签: asp.net-mvcasp.net-coreazure-blob-storage

解决方案


我创建了下面的示例进行测试,我可以成功删除容器。我的代码和你的唯一区别就是没有_moduleRepository.DeleteDownloadLink(container);这行代码。

1.我的第一个建议是,你可以把这行注释掉,再试一次。

2. 检查你的`StorageConnectionString`,确保你删除了正确的容器。

[HttpGet("blobtest")]
public async Task<string> DeleteDownloadLink(string container)
{
    var connectionString = "DefaultEn***indows.net";
    BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);
    BlobContainerClient blobContainer = blobServiceClient.GetBlobContainerClient(container);

    if (await blobContainer.ExistsAsync())
    {
        Console.WriteLine("Created container {0}", blobContainer.Name);
        try
        {
            var a= blobContainer.Delete();
            return "delete successed";
        }
        catch (Exception)
        {
            return "delete failed";
            throw;
        }
    }
    return "don't exist";
    //blobContainer.Delete();
    //return RedirectToAction("ManageDownloadLinks", "Admin");
}

推荐阅读