首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用IIS7.5压缩来自ASP.NET MVC的Json结果

如何使用IIS7.5压缩来自ASP.NET MVC的Json结果
EN

Stack Overflow用户
提问于 2010-01-26 16:38:25
回答 3查看 35.4K关注 0票数 57

我很难让IIS7正确地压缩来自ASP.NET MVC的Json结果。我已经在IIS中启用了静态和动态压缩。我可以用Fiddler验证正常的text/html和类似的记录是否被压缩。查看请求时,会显示accept-encoding gzip头。响应具有mimetype "application/json",但未压缩。

我已经确定这个问题似乎与MimeType有关。当我包含mimeType="*/*"时,我可以看到响应是正确的gzipped压缩。如何在不使用通配符mimeType的情况下压缩IIS?我假设这个问题与ASP.NET MVC生成内容类型标头的方式有关。

CPU使用率远低于动态限制阈值。当我检查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>
EN

回答 3

Stack Overflow用户

发布于 2010-01-26 16:52:24

我已经成功地使用了突出显示here的方法。

票数 22
EN

Stack Overflow用户

发布于 2010-01-26 23:26:08

我推荐this approach

创建CompressAttribute类,并设置目标操作。

票数 7
EN

Stack Overflow用户

发布于 2020-11-09 09:04:36

针对ASP.NET 4.x更新了ActionFilterAttribute方法,并包含Brotli.NET包。

using System;
using System.IO.Compression;
using Brotli;
using System.Web;
using System.Web.Mvc;


public class CompressFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        HttpRequestBase request = filterContext.HttpContext.Request;

        string acceptEncoding = request.Headers["Accept-Encoding"];
        if (string.IsNullOrEmpty(acceptEncoding)) return;

        acceptEncoding = acceptEncoding.ToUpperInvariant();
        HttpResponseBase response = filterContext.HttpContext.Response;

        if (acceptEncoding.Contains("BR"))
        {
            response.AppendHeader("Content-encoding", "br");
            response.Filter = new BrotliStream(response.Filter, CompressionMode.Compress);
        }
        else if (acceptEncoding.Contains("GZIP"))
        {
            response.AppendHeader("Content-encoding", "gzip");
            response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
        }
        else if (acceptEncoding.Contains("DEFLATE"))
        {
            response.AppendHeader("Content-encoding", "deflate");
            response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2138243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档