asp.net-mvc – Web API的压缩过滤器
|
我一直在使用压缩过滤器进行我的MVC操作,详细信息如下: 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中的“动态压缩”功能。 >然后点击动态类型,现在你在列表编辑器中,想想你想要压缩的类型。默认情况下/是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格式) (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – “’Microsoft.Jet.OLEDB.4.0’提供程序未在本地
- asp.net – 如何在MVC Razor中处理null子实体
- 为什么我的内联asp.net无法正常工作?
- asp.net-mvc-routing – ASP MVC 5属性路由VS.基于公约的路
- asp.net – 如何使RequiredFieldValidator更改父div的css类
- asp.net-mvc-3 – 如何在MVC3中限制FileUpload中的文件类型
- asp-classic – 如何在Classic ASP中延迟响应
- asp.net-mvc – 在哪里可以找到C#示例代码来实现ASP.NET MV
- asp.net-web-api – Structure Map无参数构造函数错误
- Asp.net webForm设置允许表单提交Html的方法
- asp.net 4.0 web表单路由 – 默认/通配符路由
- asp.net-mvc – 将表单提交为JSON(无AJAX)
- asp.net-mvc-3 – dataannotations在主键上设置标
- asp.net-mvc – 如何使用Windsor将依赖项注入到A
- asp.net – 使用/ signalr / ping调用时使用长轮
- 如何从ASP.NET应用程序启动/停止Windows服务 –
- asp.net-core – 如何使用带有IdentityServer4的
- ASP.NET发布尝试复制不存在的文件
- asp.net-mvc – Asp.net MVC – 我可以从不同的视
- asp.net-mvc-3 – Jquery验证器重置$.validator.
