症状非常像 SSL 上的 C# 二进制写入,但我的代码已经符合所有建议的解决方案。在撰写本文时,这种行为在Edge,IE11和Chrome上很明显。通过HTTP工作正常的代码在通过HTTPS交付时会损坏。
private void RenderPdfToResponse(bool asDownload, byte[] documentBytes)
{
Response.BufferOutput = true;
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Cache-control", "no-store");
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Length", documentBytes.Length.ToString());
if (asDownload)
Response.AddHeader("Content-Disposition",
string.Format("attachment; filename=export{0:yyyyMMddHHmmss}.pdf", DateTime.UtcNow));
Response.BinaryWrite(documentBytes);
Response.Flush();
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
问题出在浏览器上。应保存到文件中的已交付二进制内容将呈现在浏览器窗口中。使用调试工具拦截并保存到文件中可以验证传递的字节是否形成有效的 PDF。
鉴于所引用问题的所有建议都已经生效,并且问题是浏览器行为,还剩下哪些选项?
咨询 https://www.rfc-editor.org/rfc/rfc6266 我们发现文件名部分是可选的。实验指定
Response.AddHeader("Content-Disposition", "attachment");
导致所有主要浏览器弹出一个"另存为"对话框,其名称export-pdf.pdf
显然是从ASPX文件的名称和MIME类型派生的
在这一点上,我被要求发货。我希望有人觉得这有帮助。