IIS 7 удаляет имя файла Content-Disposition для приложения Content-Type /pdf

У меня есть следующий код, который возвращает файл PDF в моем веб-приложении:

string path = "help.pdf";
byte[] data = File.ReadAllBytes(path);
Response.Clear();
Response.ClearHeaders();
Response.AddHeader("Content-Length", data.Length.ToString());
Response.AddHeader("Content-Type", "application/pdf");
Response.AddHeader("Content-Disposition", "attachment; filename=help.pdf");
Response.OutputStream.Write(data, 0, data.Length);
Response.End();

Когда я вызываю обработчик этого кода в любом браузере (Chrome, IE или Firefox), я получаю диалоговое окно "Сохранить как..." с названием страницы (index.aspx), а не имя, указанное в коде (help.pdf).

Я проверил заголовок ответа HTTP со всеми браузерами. Это выглядит так:

Cache-Control:private
Content-Disposition:attachment
Content-Length:89407
Content-Type:application/pdf
Date:Thu, 07 May 2015 08:43:12 GMT
Server:Microsoft-IIS/7.5
X-Powered-By:ASP.NET
X-UA-Compatible:IE=edge,chrome=1

Как видите, параметр имени файла удален из поля Content-Disposition. Так что поведение браузера правильное. Веб-сервер (IIS), кажется, возиться с заголовком.

Я нашел кого-то с такой же проблемой здесь. Но проблема так и не была решена. Есть идеи?

Примечание: изменение кода не является решением. У нас есть сторонние элементы управления (Telerik RadGrid) на сайте, которые имеют ту же проблему с их функцией "Экспорт в PDF".

1 ответ

Решение

Проблема заключалась в том, что из-за проблемы IIS 7.5 кто-то добавил следующие строки в web.config файл заявки:

<outboundRules>
    <rule name="Force pdfs to download" preCondition="only match pdfs">
        <match serverVariable="RESPONSE_Content_Disposition" pattern="(.*)" />
        <action type="Rewrite" value="attachment" />
    </rule>
    <preConditions>
        <preCondition name="only match pdfs">
            <add input="{RESPONSE_CONTENT_TYPE}" pattern="^application/pdf" />
        </preCondition>
    </preConditions>
</outboundRules>
Другие вопросы по тегам