asp.net-mvc - 在 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 的数据稍后会在垃圾收集期间从服务中删除。
但是,我仍然可以转到链接并下载它。不返回错误。所以我想我有两个问题:
我的删除代码有问题吗?
如果代码没有问题,我可以强制垃圾收集以使链接不再可访问吗?
解决方案
我创建了下面的示例进行测试,我可以成功删除容器。我的代码和你的唯一区别就是没有_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");
}
推荐阅读
- arduino - 两个超声波传感器可以共享触发电缆吗
- python - 为什么我的聊天过滤器会阻止单词列表顶部的单词?(discord.py)
- reactjs - 反应路由语法
- php - 通过 PHP 的 exec() 运行 PowerShell 命令?
- google-tag-manager - GA4 接收事件名称但没有事件值
- c# - 字符串属性上的外键
- c# - 反序列化领域类对象时,JsonToken EndConstructor 对关闭 JsonType 对象无效
- python - 如何在 pandas(或 python csv)中读取这个 csv 文件?
- pandas - 如何加入具有相同数据的 2 个数据框?
- javascript - 改变在有效载荷中传递的 Vuex 数组