Azure Blob AppendBlobClient.AppendBlob() 偶发InvalidHeaderValue异常求助
问题原因及解决办法
原因分析
你遇到的InvalidHeaderValue异常是因为传入的messages列表为空:当messages没有任何内容时,MemoryStream里不会写入任何数据,调用AppendBlob.AppendBlock(stream)时,SDK会设置HTTP请求的content-length头为0,而Azure Append Blob(包括你使用的Azurite模拟器)不允许追加0字节的块,因此触发了这个格式错误。
你的代码里直接遍历messages写入流,但没有处理空列表的场景,导致空流被提交到Blob存储,违反了其规则。
解决办法
在写入流之前先判断messages是否为空,空列表直接返回,不执行后续追加操作:
public override void WriteLine(List<string> messages) { try { // 空消息列表直接返回,避免提交空流 if (messages == null || messages.Count == 0) return; using (var stream = new MemoryStream()) { foreach (var message in messages) { var bytes = Encoding.UTF8.GetBytes(message); stream.Write(bytes, 0, bytes.Length); stream.Write(CrLf); } stream.Position = 0; AppendBlob.AppendBlock(stream); } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine($"BlobQueueWriter.WriteLine() threw exception {ex}"); Container = ServiceClient.GetBlobContainerClient(ContainerName); AppendBlob = Container.GetAppendBlobClient(BlobName); } }
补充说明:Azure Append Blob要求每个追加块的最小大小为1字节,只要确保提交的流包含至少1字节数据,就能避免这类错误。
内容的提问来源于stack exchange,提问作者David Thielen
相关产品推荐
相关产品推荐

