【问题标题】:.NET, ASHX, "Server cannot append header after HTTP headers have been sent" after sending PDF Streem.NET、ASHX、“发送 HTTP 标头后服务器无法附加标头”在发送 PDF 流后
【发布时间】:2011-06-02 05:49:52
【问题描述】:

我访问了我的 ASHX 文件,它完美地输出了 PDF。如果我使用不同的查询字符串访问同一个 ASHX(每次访问都将 DateTime.Now.Ticks 附加到末尾),我会收到此错误:

发送 HTTP 标头后,服务器无法附加 hader。

我的代码如下:

copy.CloseStream = false;
document.Close();

var r = context.Response;
r.ExpiresAbsolute = DateTime.Now;
r.BufferOutput = true;
r.ContentType = "application/pdf";
r.AppendHeader("Content-Type", r.ContentType);
r.AppendHeader("Content-disposition", "inline; filename=" + context.Server.UrlEncode(formType.File_Name));

r.BinaryWrite(copyStream.ToArray());
r.StatusCode = 200;
r.End();
originalReader.Close();
copy.CloseStream = true;
copy.Close();

此代码中没有其他地方发送标头。您将看到与 Response 对象的整个交互。

我尝试使用 r.Flush();r.End(); 如果它们已经存在,我也尝试不发送它们,但这会导致其他问题。

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    问题出在r.StatusCode = 200;,对应设置header的第一行。

    由于这是在发送有效载荷之后发生的,这在 HTTP 协议中是不可接受的。

    你必须早点这样做。

    【讨论】:

    • 看来我的问题超出了我在此处显示的代码。事实证明,我真正的问题是我在 Image 事件处理程序中使用了 WebRequest 对象。它不在我的 ASHX 中,但我的 ASHX 正在使用它。但是,您是正确的,响应代码也位于错误的位置!非常感谢!
    猜你喜欢
    • 2011-09-13
    • 2011-02-21
    • 2023-03-08
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 2016-03-20
    相关资源
    最近更新 更多