Firefox неправильно обрабатывает тип контента при использовании IHttpHandler

StackOverflow https://stackoverflow.com/questions/1982909

Вопрос

Firefox по какой-то причине неправильно обрабатывает контент, отправленный через мой HTTP-обработчик .NET;похоже, что это не соответствует заголовку типа контента.Скорее, он рассматривает содержимое как HTML.URL-адрес, сопоставленный с запросом, даже имеет расширение .csv.Internet Explorer и Chrome поступают правильно.Проблема возникает как для обработчика "text / css", так и для обработчика "application / pdf".

Вот фрагмент метода ProcessRequest моего HTTP-обработчика ProcessRequest:

public void ProcessRequest(HttpContext context)
{
    // ...

    // Set the output headers
    context.Response.ClearHeaders();
    context.Response.ContentType = "text/csv";
    context.Response.AddHeader(
        "Content-Disposition", "attachment; filename=foo.csv");

    // Code that writes to the output stream
    // ...

    context.Response.End();
}

Чего не хватает в моем ответе, который позволил бы Firefox распознавать тип контента, как ожидалось?

Правка 1:

Я видел, что при использовании расширения Firefox Live HTTP Headers я получаю обратно следующие заголовки.Похоже, что мой заголовок ContentType теряется.

HTTP/1.x 200 OK
Server: ASP.NET Development Server/9.0.0.0
Date: Thu, 31 Dec 2009 02:34:09 GMT
X-AspNet-Version: 2.0.50727
Content-Disposition: attachment;filename="foo.csv"
Cache-Control: private
Content-Type: text/html
Content-Length: 66682
Connection: Close

Правка 2:

Нашел проблему.В моем обработчике я использовал context.Server.Execute сгенерировать HTML из шаблона ASPX, затем обработать этот HTML.Другими словами, я не использовал context. Server.Execute для непосредственного вывода в ответ.Несмотря на это, запуск этого метода изменяет заголовки ответов текущего контекста.Таким образом, это означало отмену установленных мной заголовков.Перемещение кода, изменяющего заголовки, в after context.Server.Execute решил проблему.

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

Это было полезно?

Решение

Это действительно кажется странным.Я бы установил Живые HTTP-Заголовки дополнение для Firefox просто для подтверждения того, что Firefox действительно видит эти два заголовка, как вы и ожидали.

RFC 2616 также, по-видимому, предполагает заключаем имя файла в кавычки, так что вы тоже могли бы попробовать это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top