ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION - 无法找出原因
ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION - unable to find out why
我在返回我的 docx 文件时收到 ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION,但是我不确定 header 错误来自何处。我已尽力删除任何动态和硬编码的内容以弄清楚,但无济于事。
byte[] byteArray = File.ReadAllBytes(@"T:\Praktik log\Learning Goals.docx");
using (MemoryStream mem = new MemoryStream())
{
mem.Write(byteArray,0,byteArray.Length);
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(mem, true))
{
RevisionAccepter.AcceptRevisions(wordDoc);
wordDoc.MainDocumentPart.Document.Body.InsertAt(
new Paragraph(
new Run(
new Text("Newly inserted paragraph."))), 0);
}
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.Cookies.Clear();
//Add the header & other information
Response.Cache.SetCacheability(HttpCacheability.Private);
Response.CacheControl = "private";
Response.Charset = System.Text.UTF8Encoding.UTF8.WebName;
Response.ContentEncoding = System.Text.UTF8Encoding.UTF8;
Response.AppendHeader("Content-Length", mem.ToArray().Length.ToString());
Response.AppendHeader("Pragma", "cache");
Response.AppendHeader("Expires", "60");
Response.AppendHeader("Content-Disposition",
"attachment; " +
"filename=\"ActivationKey.docx\"; " +
"size=" + mem.ToArray().Length + "; " +
"creation-date=" + DateTime.Now.ToString("R") + "; " +
"modification-date=" + DateTime.Now.ToString("R") + "; " +
"read-date=" + DateTime.Now.ToString("R"));
Response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
//Write it back to the client
Response.BinaryWrite(mem.ToArray());
Response.End();
我可以在 IE 上下载它,因为它提供了有关安全性的废话,但是 chrome 说不行,我需要 Chrome 支持此下载。
编辑:Fiddler 响应:https://prnt.sc/pddibg
你在做一件奇怪的事。
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.Cookies.Clear();
ASP.NET 放置一些 headers 本身。
请尽量不要删除它们并使用本机(如果它们存在于 headers 你试图修改,当然)ASP.NET 方法来修改响应 headers.
您还可以设置 HTTP 调试代理。
它将帮助您了解您到底做错了什么。
这是我知道的一些 HTTP 调试代理:Fiddler, Wireshark or Charles (paid, requires Java).
This guy通过返回System.IO.File
实现文件下载。
另外 this question 看起来像你的。
检查这些答案,它们可能对您有所帮助。
我通过以下方式下载了命名文件:
[HttpGet]
public void Get()
{
Response.Headers.Add("Content-Disposition", "attachment; filename=\"file.bin\"");
var buffer = Enumerable.Repeat((byte) 0xF, 2048).ToArray(); //bytes
Response.Body.Write(buffer, 0, buffer.Length);
}
测试 Google Chrome(版本 77.0.3865.90)。
文件已下载并包含 2048 字节的数据。
Fiddler 中的服务器响应:screenshot
我在返回我的 docx 文件时收到 ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION,但是我不确定 header 错误来自何处。我已尽力删除任何动态和硬编码的内容以弄清楚,但无济于事。
byte[] byteArray = File.ReadAllBytes(@"T:\Praktik log\Learning Goals.docx");
using (MemoryStream mem = new MemoryStream())
{
mem.Write(byteArray,0,byteArray.Length);
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(mem, true))
{
RevisionAccepter.AcceptRevisions(wordDoc);
wordDoc.MainDocumentPart.Document.Body.InsertAt(
new Paragraph(
new Run(
new Text("Newly inserted paragraph."))), 0);
}
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.Cookies.Clear();
//Add the header & other information
Response.Cache.SetCacheability(HttpCacheability.Private);
Response.CacheControl = "private";
Response.Charset = System.Text.UTF8Encoding.UTF8.WebName;
Response.ContentEncoding = System.Text.UTF8Encoding.UTF8;
Response.AppendHeader("Content-Length", mem.ToArray().Length.ToString());
Response.AppendHeader("Pragma", "cache");
Response.AppendHeader("Expires", "60");
Response.AppendHeader("Content-Disposition",
"attachment; " +
"filename=\"ActivationKey.docx\"; " +
"size=" + mem.ToArray().Length + "; " +
"creation-date=" + DateTime.Now.ToString("R") + "; " +
"modification-date=" + DateTime.Now.ToString("R") + "; " +
"read-date=" + DateTime.Now.ToString("R"));
Response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
//Write it back to the client
Response.BinaryWrite(mem.ToArray());
Response.End();
我可以在 IE 上下载它,因为它提供了有关安全性的废话,但是 chrome 说不行,我需要 Chrome 支持此下载。
编辑:Fiddler 响应:https://prnt.sc/pddibg
你在做一件奇怪的事。
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.Cookies.Clear();
ASP.NET 放置一些 headers 本身。
请尽量不要删除它们并使用本机(如果它们存在于 headers 你试图修改,当然)ASP.NET 方法来修改响应 headers.
您还可以设置 HTTP 调试代理。
它将帮助您了解您到底做错了什么。
这是我知道的一些 HTTP 调试代理:Fiddler, Wireshark or Charles (paid, requires Java).
This guy通过返回System.IO.File
实现文件下载。
另外 this question 看起来像你的。
检查这些答案,它们可能对您有所帮助。
我通过以下方式下载了命名文件:
[HttpGet]
public void Get()
{
Response.Headers.Add("Content-Disposition", "attachment; filename=\"file.bin\"");
var buffer = Enumerable.Repeat((byte) 0xF, 2048).ToArray(); //bytes
Response.Body.Write(buffer, 0, buffer.Length);
}
测试 Google Chrome(版本 77.0.3865.90)。
文件已下载并包含 2048 字节的数据。
Fiddler 中的服务器响应:screenshot