c# – MVC 4 – GZIP压缩JSON ajax动作结果

前端之家收集整理的这篇文章主要介绍了c# – MVC 4 – GZIP压缩JSON ajax动作结果前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
问题

我在IIS 7.5上运行的MVC 4应用程序上有一个Telerik MVC UI网格,可以通过AJAX潜在地返回大量的JSON数据,在极端情况下为800kb或更多.由于有效载荷可能很大,我想要GZIP它.对于我的生活,我不能让它工作.

控制器的动作是:

  1. public ActionResult _CustomBinding([DataSourceRequest] DataSourceRequest request,SearchMemberModel search)
  2. {
  3. //Do some stuff
  4.  
  5. return Json(result);
  6. }

Fiddler报告:

已经尝试了

我已经确保在IIS中启用动态和静态压缩:

App Web.Config修改

  1. <system.webServer>
  2. <serverRuntime frequentHitThreshold="1" frequentHitTimePeriod="10:00:00" />
  3.  
  4. <validation validateIntegratedModeConfiguration="false" />
  5. <modules runAllManagedModulesForAllRequests="false">
  6. <remove name="FormsAuthentication" />
  7. </modules>
  8.  
  9. <httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
  10.  
  11. <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" />
  12. <dynamicTypes>
  13. <add mimeType="text/*" enabled="true" />
  14. <add mimeType="message/*" enabled="true" />
  15. <add mimeType="application/x-javascript" enabled="true" />
  16. <add mimeType="application/json" enabled="true" />
  17. <add mimeType="*/*" enabled="false" />
  18. </dynamicTypes>
  19. <staticTypes>
  20. <add mimeType="text/*" enabled="true" />
  21. <add mimeType="message/*" enabled="true" />
  22. <add mimeType="application/x-javascript" enabled="true" />
  23. <add mimeType="application/atom+xml" enabled="true" />
  24. <add mimeType="application/xaml+xml" enabled="true" />
  25. <add mimeType="*/*" enabled="false" />
  26. </staticTypes>
  27. </httpCompression>
  28.  
  29. <urlCompression doStaticCompression="true" doDynamicCompression="true" />
  30.  
  31. </system.webServer>

我确定了ApplicationHost file has the right mime types

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

我已经尝试了serverRuntime频繁HitThreshold需要修改suggestion here.

有没有我失踪的东西?

解决方法

好吧,我似乎也需要在我的控制器里做一些事情:

根据以下提取自:how to gzip content in asp.net MVC?

  1. public class CompressAttribute : ActionFilterAttribute
  2. {
  3. public override void OnActionExecuting(ActionExecutingContext filterContext)
  4. {
  5.  
  6. var encodingsAccepted = filterContext.HttpContext.Request.Headers["Accept-Encoding"];
  7. if (string.IsNullOrEmpty(encodingsAccepted)) return;
  8.  
  9. encodingsAccepted = encodingsAccepted.ToLowerInvariant();
  10. var response = filterContext.HttpContext.Response;
  11.  
  12. if (encodingsAccepted.Contains("deflate"))
  13. {
  14. response.AppendHeader("Content-encoding","deflate");
  15. response.Filter = new DeflateStream(response.Filter,CompressionMode.Compress);
  16. }
  17. else if (encodingsAccepted.Contains("gzip"))
  18. {
  19. response.AppendHeader("Content-encoding","gzip");
  20. response.Filter = new GZipStream(response.Filter,CompressionMode.Compress);
  21. }
  22. }

控制器中的使用:

  1. [Compress]
  2. public class BookingController : BaseController
  3. {...}

猜你在找的C#相关文章