Azure Storage Blobs GetBlobs方法异常排查(容器路径均正确)
问题解决:Azure Blob SDK 12.14 遍历Blob循环无迭代且返回空集合
核心问题分析
- 未将实例对象加入结果集合:循环内创建了
EvaluationImage实例,但未调用images.Add(img)将其加入列表,这是返回空集合、导致调用方出现空引用错误的直接原因。 - 可空参数未做判空处理:
customer为可空类型,直接访问customer.AzureFolderName或customer.CompanyName会在customer为null时触发空引用异常,代码未覆盖该场景。 - 前缀匹配需验证一致性:Azure Blob存储路径大小写敏感,需确认
customer.AzureFolderName的值与Blob路径中的对应部分完全一致(示例中为robsonpty)。
修改后的代码
public async Task<List<EvaluationImage>> GetImagesFromVirtualFolder(CompanyDataDto? customer) { var images = new List<EvaluationImage>(); // 先做判空处理,避免空引用异常 if (customer == null || string.IsNullOrEmpty(customer.AzureFolderName)) { return images; } var imageFolderPrefix = $"publicfiles/images/{customer.AzureFolderName}/"; var containerClient = new BlobContainerClient(ConnectionSettings.PrimaryConnection, ContainerSettings.MainAppContainer); try { await foreach (var blob in containerClient.GetBlobsAsync(prefix: imageFolderPrefix)) { var filename = blob.Name; var img = new EvaluationImage { ImageUrl = $"{containerClient.Uri.AbsoluteUri}/{filename}", ImageCaption = GetCaptionFromFilename(filename), IsPosterImage = filename.Contains("poster"), ImagesForCompany = customer.CompanyName }; // 关键:将实例对象添加到结果集合 images.Add(img); } } catch (RequestFailedException ex) { Log.Logger.Error(ex.Message); throw; } return images; }
额外验证步骤
- 确认
customer.AzureFolderName的值与Blob路径中的文件夹名称完全一致(注意大小写)。 - 检查连接字符串权限:确保
ConnectionSettings.PrimaryConnection对应的账号拥有Blob读取权限(即使容器公开,SDK调用仍需有效权限)。 - 可在循环内添加日志输出
blob.Name,确认是否有Blob被正常遍历到,排查前缀匹配是否准确。
内容的提问来源于stack exchange,提问作者dinotom
相关产品推荐
相关产品推荐

