2011-04-10 33 views
8

Tôi đã cố sử dụng phương pháp được mô tả tại đây ASP.NET MVC Action Filter - Caching and Compression. Ban đầu, kết quả đáng khích lệ khi máy chủ bắt đầu gửi các tệp được mã hóa GZip nhưng sau khi thử nghiệm thêm, đôi khi, trong các trang có phần Html.RenderAction thuộc tính sẽ được gọi hai lần gzip trang đã được nén. Có ai biết một phương pháp ổn định hơn để phục vụ các trang nén với ASP.NET MVC 2 hay bất kỳ ý tưởng nào về cách sửa đổi mã để tổng quát hơn không?GZip hoặc Deflate nén cho asp.net mvc 2 mà không truy cập vào cấu hình máy chủ

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); 
     } 
    } 

}

Trả lời

7

Bạn có thể bỏ qua những hành động trẻ em:

if (filterContext.IsChildAction) 
{ 
    return; 
} 
... 
+0

trình như một say mê. Cảm ơn bạn. – mrichana

Các vấn đề liên quan