Как сжать результат Json из ASP.NET MVC с помощью IIS 7.5
Мне трудно заставить IIS 7 правильно сжать результат Json от ASP.NET MVC. Я включил статическое и динамическое сжатие в IIS. Я могу проверить с помощью Fiddler, что обычный текст /html и подобные записи сжимаются. При просмотре запроса присутствует заголовок gzip accept-encoding. Ответ имеет mimetype "application/json", но не сжат.
Я обнаружил, что проблема связана с MimeType. Когда я включаю mimeType="*/*"
, я вижу, что ответ правильно gzipped. Как мне заставить IIS сжимать без использования подстановочного mimeType? Я предполагаю, что эта проблема имеет какое-то отношение к тому, как ASP.NET MVC генерирует заголовки типов контента.
Использование ЦП значительно ниже порога динамического дросселирования. Когда я просматриваю журналы трассировки из IIS, я вижу, что он не сжимается из-за отсутствия подходящего типа mime.
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files" noCompressionForProxies="false">
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/x-javascript" enabled="true" />
<add mimeType="application/json" enabled="true" />
</dynamicTypes>
<staticTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/x-javascript" enabled="true" />
<add mimeType="application/atom+xml" enabled="true" />
<add mimeType="application/xaml+xml" enabled="true" />
<add mimeType="application/json" enabled="true" />
</staticTypes>
</httpCompression>
Ответы
Ответ 1
Убедитесь, что ваш % WinDir%\System32\inetsrv\config\applicationHost.config содержит следующие данные:
<system.webServer>
<urlCompression doDynamicCompression="true" />
<httpCompression>
<dynamicTypes>
<add mimeType="application/json" enabled="true" />
<add mimeType="application/json; charset=utf-8" enabled="true" />
</dynamicTypes>
</httpCompression>
</system.webServer>
Из ссылка @AtanasKorchev.
Как пояснил @simon_weaver в комментариях, вы можете редактировать неправильный файл с 32-битным редактором на 64-битной Windows, используйте notepad.exe, чтобы убедиться, что этот файл действительно изменен.
Ответ 2
Я успешно использовал выделенный подход здесь.
Ответ 3
Используйте это руководство
Ни один из этих ответов не работал у меня. Я принял к сведению приложение /json; charset = utf-8 mime-type.
Ответ 4
Я рекомендую этот подход
Создайте класс CompressAttribute
и установите целевое действие.