c# - .NET, ASHX, "Server cannot append header after HTTP headers have been sent"发送 PDF 流后

标签 c# asp.net

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

服务器无法在发送 HTTP header 后追加 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();

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

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

最佳答案

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

由于这是在发送有效负载之后发生的,因此这在 HTTP 协议(protocol)中是 Not Acceptable 。

你必须早点这样做。

关于c# - .NET, ASHX, "Server cannot append header after HTTP headers have been sent"发送 PDF 流后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4574389/

相关文章:

c# - 异步迭代器任务<IEnumerable<T>>

c# - 创建一个set get类并在构造函数中传递参数

c# - 如何使用 requireSSL ="true"修复 CSRF 和 [加密 session (SSL) Cookie 中缺少安全属性] 问题?

c# - 将参数传递给 SharePoint 计时器作业

c# - 如果将回调分配给对象两次,事件是否会执行两次?

c# - .Net 无法连接到 Apple 推送通知服务

c# - Asp.Net MVC 路由不接受 & 在路由中

C#密码加密

c# - 在 C# 中管理键值对的最佳方法

c# - 如何延迟关闭并在窗口服务中运行进程