0

返回我的 docx 文件时,我收到 ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION,但是我不确定错误来自哪里。我已经尽力删除任何动态和硬编码的东西来解决它,但无济于事。

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 说 nogo,我需要 Chrome 支持这个下载。

编辑:提琴手响应:https ://prnt.sc/pddibg

4

1 回答 1

1

你在做一件奇怪的事情。

Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.Cookies.Clear();

ASP.NET 自己放置一些标头。
请尽量不要删除它们并使用本机(如果它们存在于您尝试修改的标头,当然)ASP.NET 方法来修改响应标头。

您还可以设置 HTTP 调试代理。
它将帮助您了解您到底做错了什么。
这是我知道的一些 HTTP 调试代理:FiddlerWiresharkCharles(付费,需要 Java)

这家伙通过返回实现了文件下载System.IO.File这个问题
也看起来像你的。

检查这些答案,它们可能会对您有所帮助。

我通过以下方式下载了一个命名文件:

[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 中的服务器响应:截图

于 2019-10-01T12:15:48.310 回答