ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION - невозможно выяснить, почему - PullRequest
0 голосов
/ 01 октября 2019

Я получаю ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION при возврате моего файла docx, однако я не уверен, откуда в моем заголовке произошла ошибка. Я старался изо всех сил, чтобы удалить все, что является динамическим и жестко запрограммированным, чтобы понять это, но безрезультатно.

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 для этой загрузки.

РЕДАКТИРОВАТЬ: Ответ Fiddler: https://prnt.sc/pddibg

1 Ответ

1 голос
/ 01 октября 2019

Вы делаете одну странную вещь.

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

ASP.NET сам размещает некоторые заголовки. Пожалуйста, постарайтесь не удалять их и использовать собственные (если они существуют для заголовков, которые вы пытаетесь изменить, конечно) методы ASP.NET для изменения заголовков ответов.

Также вы можете настроить прокси-сервер отладки HTTP. Это поможет вам понять, что именно вы делаете неправильно. Вот некоторые прокси-серверы для отладки HTTP, которые я знаю: Fiddler , Wireshark или Чарльз (платный, требуется 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: снимок экрана

...