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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 22:57:48