Подтвердить что ты не робот

MVC 4 - сжатие GZIP результата действия ajax JSON

Проблема

У меня есть сетка UI Telerik MVC в приложении MVC 4, работающем на IIS 7.5, который может потенциально возвращать большое количество данных JSON через AJAX, в крайних случаях 800 кб или более. Поскольку полезная нагрузка может быть большой, я хочу ее GZIP. Для жизни я не могу заставить ее работать.

Действие контроллера:

public ActionResult _CustomBinding([DataSourceRequest] DataSourceRequest request, SearchMemberModel search)
{
    //Do some stuff

   return Json(result);
}

Отчеты Fiddler: enter image description here

Что было опробовано

Я обеспечил динамическое и статическое сжатие в IIS:

enter image description here

Приложение Web.Config изменено:

  <system.webServer>
    <serverRuntime frequentHitThreshold="1" frequentHitTimePeriod="10:00:00" />

    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="false">
      <remove name="FormsAuthentication" />
    </modules>

    <httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">

      <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9"  />
      <dynamicTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/x-javascript" enabled="true" />
        <add mimeType="application/json" enabled="true" />
        <add mimeType="*/*" enabled="false" />
      </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="*/*" enabled="false" />
      </staticTypes>
    </httpCompression>

    <urlCompression doStaticCompression="true" doDynamicCompression="true" />

  </system.webServer>

Я убедился, что ApplicationHost имеет правильные типы mime:

    <add mimeType="application/json" enabled="true" />
    <add mimeType="application/json; charset=utf-8" enabled="true" />
    <add mimeType="application/json;charset=utf-8" enabled="true" />

Я попробовал здесь здесь, что serverRuntime oftenHitThreshold нуждается в изменении.

Есть ли что-то, что мне не хватает?

4b9b3361

Ответ 1

Хорошо, мне кажется, мне тоже нужно что-то сделать в моем контроллере:

В соответствии с приведенным ниже из способом gzip-содержимого в asp.net MVC?

public class CompressAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {

        var encodingsAccepted = filterContext.HttpContext.Request.Headers["Accept-Encoding"];
        if (string.IsNullOrEmpty(encodingsAccepted)) return;

        encodingsAccepted = encodingsAccepted.ToLowerInvariant();
        var response = filterContext.HttpContext.Response;

        if (encodingsAccepted.Contains("deflate"))
        {
            response.AppendHeader("Content-encoding", "deflate");
            response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
        }
        else if (encodingsAccepted.Contains("gzip"))
        {
            response.AppendHeader("Content-encoding", "gzip");
            response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
        }
    }

использование в контроллере:

[Compress]
public class BookingController : BaseController
{...}