http://msdn.microsoft.com/en-us/magazine/gg232768.aspx
我已经尝试重新使用代码来做类似于Web API的操作,但是我遇到了一个路障:
public class CompressAPIAttribute : System.Web.Http.Filters.ActionFilterattribute { public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext filterContext) { var preferredEncoding = GetPreferredEncoding(filterContext.Request); Stream compressedStream = null; // Compress the response accordingly var response = filterContext.Response; response.Headers.Add("content-encoding",preferredEncoding.ToString()); if (preferredEncoding == CompressionScheme.Gzip) { response.Content = new GZipStream(compressedStream,CompressionMode.Compress); //THIS WON'T WORK } if (preferredEncoding == CompressionScheme.Deflate) { response.Content = new DeflateStream(compressedStream,CompressionMode.Compress); //THIS WON'T WORK } return; } enum CompressionScheme { Gzip = 0,Deflate = 1,Identity = 2 } private CompressionScheme GetPreferredEncoding(HttpRequestMessage request) { var acceptableEncoding = request.Headers.AcceptEncoding; if (acceptableEncoding.Where(h => h.Value.Contains("gzip")).Count() > 0) return CompressionScheme.Gzip; if (acceptableEncoding.Where(h => h.Value.Contains("deflate")).Count() > 0) return CompressionScheme.Deflate; return CompressionScheme.Identity; }
我应该指出这是托管在IIS 6.0,我不控制。
解决方法
如果您正在使用IIS,请执行以下操作来设置压缩(以下是Scott Hanselman的blog post的一些片段):
>启用IIS中的“动态压缩”功能。
>返回到IIS管理器中,转到SERVER页面,而不是站点。点击配置编辑器:
>从下拉列表中选择system.webServer / httpCompression:
>然后点击动态类型,现在你在列表编辑器中,想想你想要压缩的类型。默认情况下/是False,但是你可以打开它。我选择了一些更挑剔的添加应用程序/ atom xml,application / json和application / atom xml; charset = utf-8,如下所示。这个应用程序/ atom xml和application / atom xml; charset = utf-8是一个单独的条目。随意添加您喜欢的mimeTypes在这里。
>添加完成并关闭对话框后,请确保单击应用并重新启动IIS服务以加载新模块。>现在使用Accept-Encoding标头进行请求,您应该按预期的方式看到响应。>编辑(除了上面包括“application / json; charset = utf-8”以涵盖两种json格式)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。