You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ListBlobsSegmentedAsync无法列出软删除Blob的问题咨询

ListBlobsSegmentedAsync无法返回软删除Blob的修复方案

核心排查项

  • 代码语法错误:示例代码中BlobListingDetails.Deleted与后续null参数之间缺失逗号,会造成参数传值错位,实际传入的前缀、列表详情配置完全不符合预期,无法触发软删除Blob的返回逻辑。
  • 前置功能未开启:Blob软删除是存储账户级别的可选功能,必须手动启用才会生效。如果未开启软删除,Blob删除后会被直接永久清除,不存在软删除条目可供接口返回,此时修改枚举参数没有任何作用。
  • 枚举传值不全:BlobListingDetails为位标记枚举,仅传入Deleted值无法覆盖软删除Blob关联的快照、版本条目。如果存储账户同时开启了Blob版本管理,软删除操作会生成对应的删除标记版本,必须在枚举中加入版本相关标记才能被正常列出。
  • 自定义配置干扰:问题排查阶段不要传入自定义requestOptions,如果存储账户开启了异地冗余读访问,自定义的位置模式可能将请求路由到数据同步延迟的次要副本,导致软删除条目读取不全。

修正后可运行代码

BlobContinuationToken continuationToken = null;
List<IListBlobItem> allBlobList = new List<IListBlobItem>();
do
{
    // 组合枚举值,覆盖软删除Blob关联的所有条目类型
    BlobListingDetails listingConfig = BlobListingDetails.Deleted
        | BlobListingDetails.Snapshots
        | BlobListingDetails.Versions
        | BlobListingDetails.Metadata;
    
    BlobResultSegment resultSegment = await CloudBlobContainer.ListBlobsSegmentedAsync(
        prefix: "",
        useFlatBlobListing: true,
        blobListingDetails: listingConfig,
        maxResults: null,
        currentToken: continuationToken,
        options: null,
        operationContext: new OperationContext()
    );

    continuationToken = resultSegment.ContinuationToken;
    allBlobList.AddRange(resultSegment.Results);
} while (continuationToken != null);

// 筛选出所有软删除状态的Blob
List<CloudBlockBlob> deletedBlobs = allBlobList
    .OfType<CloudBlockBlob>()
    .Where(blob => blob.IsDeleted)
    .ToList();

验证注意事项

接口调用前先进入存储账户的「数据保护」配置页,确认「Blob软删除」功能已启用,且保留周期配置符合预期。如果是刚开启软删除功能,等待1-2分钟让配置在存储集群全局生效后再发起请求,避免配置未同步导致的返回异常。

内容的提问来源于stack exchange,提问作者user19401992

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 01:27:18