8

ここで説明されている方法を使用しようとしましたASP.NET MVC Action Filter - Caching and Compression。最初は、実際にサーバーが GZip エンコード ファイルの送信を開始したため、推奨される結果が得られましたが、さらにテストした後、Html.RenderAction パーツを含むページで、既に gzip されたページを gzip すると、属性が 2 回呼び出されることがありました。ASP.NET MVC 2 で圧縮されたページを提供するより安定した方法や、コードをより一般的なものに変更する方法を知っている人はいますか?

public class CompressFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(FilterExecutingContext 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("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);
        }
    }

}

4

1 に答える 1

7

子アクションを無視できます:

if (filterContext.IsChildAction)
{
    return;
}
...
于 2011-04-10T07:55:24.517 に答える