Почему IIS7 игнорирует мой заголовок типа контента, когда я использую ASP.NET для потоковой передачи файлов?

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

Вопрос

У меня есть простой веб-сайт с двумя страницами.Один отображает список файлов, а другой передает файл при нажатии на него в списке.В течение 6 месяцев в производстве все было нормально, но теперь мне нужно перенести сайт на Windows 2008/IIS7.У меня он в основном работает, но файлы не открываются должным образом (в Firefox), потому что мой заголовок типа контента игнорируется.На рабочем сайте (IIS6) заголовки (с использованием Fiddler):

HTTP/1.1 200 OK
Date: Tue, 09 Feb 2010 16:00:51 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Content-Disposition: attachment; filename="myfile__foo.pdf"
Content-Length: 236841
Cache-Control: no-cache, no-store
Pragma: no-cache
Expires: -1
Content-Type: application/octet-stream

но на тестовом сервере IIS7 я получаю:

HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 236841
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 2.0.50727
Content-Disposition: attachment; filename="myfile__foo.pdf"

Fiddler также сообщает о нарушении протокола и говорит: «Несоответствие длины контента:В заголовке ответа заявлено 236841 байт, но сервер отправил 238378 байт».

Мой код выглядит следующим образом:

            Response.Clear();
            Response.AddHeader("Content-Disposition", "attachment; filename=\"" + doc.DisplayFilename + "." + doc.FileExtension + "\"");
            Response.AddHeader("Content-Length", file.Length.ToString());
            Response.ContentType = "application/octet-stream";
            Response.TransmitFile(file.FullName);
            Response.End();

Я пытался это исправить уже пару дней.Я не очень хорошо знаком с IIS7 и изо всех сил пытаюсь найти, где изменить различные настройки.Мне удалось разобраться с двумя режимами управляемого конвейера и исправить некоторые другие проблемы, переключившись на Classic .NET AppPool (Integrated выдавал всевозможные ошибки при передаче файла).

Есть ли способ сообщить IIS7, чтобы он не перезаписывал мой заголовок ContentType, если это происходит?

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

Решение

У вас нет HttpModules, изменяющих запрос/ответ?Файлы web.config точно такие же?

Откуда берутся эти дополнительные 2 КБ?Что в них?

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