Невозможно отобразить файл .mht в IE с IIS 7 при отправке неправильного типа MIME - PullRequest
2 голосов
/ 18 января 2012

У нас есть страница на сайте ASP.NET со ссылкой на файл .MHT, поэтому, когда пользователь нажимает на ссылку, он может просматривать файл MHT в браузере.

Проблема в том, что он отображается пустым, а заголовок, который отправляет IIS, выглядит следующим образом:

HTTP/1.1 200 OK
Cache-Control: private
Transfer-Encoding: chunked
Content-Type: application/octet-stream
Server: Microsoft-IIS/7.5
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Wed, 18 Jan 2012 18:45:19 GMT

У нас в IIS MIME-тип уже настроен правильно по умолчанию, как это:

.mht    message/rfc822

Мы заметили, что если мы открываем файл с помощью файловой системы на нашем компьютере, IE отображает его правильно, поэтому проблема заключается в заголовке, который IIS отправляет с файлом (мы предполагаем).

Есть идеи, почему IIS отправляет этот заголовок, который мешает нам правильно отображать файл MHT? Любое решение?

Большое спасибо!

UPDATE

Теперь мы подумаем о нескольких обходных путях: см. Ответ от меня.

* Спасибо всем!

Ответы [ 3 ]

1 голос
/ 19 января 2012
  1. Использовать обработчик HTTP:

    a) В web.config под system.web добавить узел, похожий на:

    <add verb="GET" path="*.mht" type="WebApplication1.Handler1" />
    

    b) В коде обработчика сзадивнутри метода ProcessRequest добавьте следующее:

    context.Response.ContentType = "message/rfc822"; 
    context.Response.Write(System.IO.File.ReadAllText(context.Server.MapPath(context.Request.FilePath)));
    
  2. Используйте фильтры ISAPI для изменения заголовка Content-Type перед отправкой его клиенту.Вам потребуется Windows 7 SDK для Server 2008 R2 или более старые версии SDK, в зависимости от целевого сервера.

  3. В Global.asax в одном из этих событий измените значение заголовка наТип содержимого:

    a) Application_PreSendRequestContent

    или b) Application_PreSendRequestHeaders

    Минусы этого: вы будете перехватывать каждый вызов.

  4. Используйте сценарии CGI для изменения значения заголовка Content-Type.

Мы решили использовать решение HTTP Handler.

С уважением,

Фабиан Фернандес

0 голосов
/ 18 января 2012

Файл .mht находится в том же веб-приложении, что и ваше приложение asp.net?если он находится в другом веб-приложении / виртуальном каталоге / веб-сервере, вам необходимо проверить тип MIME для этого конкретного местоположения.

Если он находится в том же веб-приложении, убедитесь, что вы проверилитипы MIME в IIS для этого конкретного веб-приложения, поскольку типы MIME могут различаться в разных веб-приложениях и веб-сайтах на одном компьютере.

0 голосов
/ 18 января 2012

Вы правы по всем пунктам:

1) Первое, на что я посмотрю, это конфигурация локального браузера - вы убедились, что IE правильно открывает локальный файл

2) Второе, на что я посмотрю, это заголовки содержимого IIS.Вы правы: правильный MIME-тип для файлов MS HTML (.mht) должен быть «message / rfc822»;Content-Type должен быть "application / octet-stream".

3) Эта ссылка предлагает несколько различных альтернатив:

http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/d94c0d4e-0d32-4648-bdd6-dc3f28bb4797/

...