rma*_*mac 12 compression asp.net-mvc
当我使用压缩过滤器并获得错误时,错误页面只是乱码字符.问题似乎是当IIS转移到错误页面时,压缩过滤器仍然有效,但标题被清除.如果没有"Content-encoding:gzip"标头,浏览器只会显示原始gzip二进制数据.
我正在使用IIS7.5,ASP.NET MVC 2 Preview 2和一个看起来像这样的ActionFilter:
public class CompressResponseAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var request = filterContext.HttpContext.Request;
var response = filterContext.HttpContext.Response;
var acceptEncoding = request.Headers["Accept-Encoding"];
if (string.IsNullOrEmpty(acceptEncoding))
return;
acceptEncoding = acceptEncoding.ToLowerInvariant();
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
有人经历过这个吗?
rma*_*mac 12
更新: 我偶然发现了Rick Strahl关于压缩这个以及其他问题的博客文章.见:http: //www.west-wind.com/weblog/posts/2011/May/02/ASPNET-GZip-Encoding-Caveats
他的解决方案似乎更可靠,是将以下内容放在Global.asax.cs中:
protected void Application_Error(object sender, EventArgs e)
{
// Remove any special filtering especially GZip filtering
Response.Filter = null;
}
Run Code Online (Sandbox Code Playgroud)
原始答案: 我通过在OnResultExecuting中应用压缩而不是OnActionExecuting来解决这个问题.
归档时间: |
|
查看次数: |
1526 次 |
最近记录: |