2009-11-03 3 views
11

Khi tôi đang sử dụng bộ lọc nén và gặp lỗi, trang lỗi chỉ là các ký tự vô nghĩa. Vấn đề có vẻ là khi IIS chuyển sang trang lỗi, bộ lọc nén vẫn có hiệu lực, nhưng tiêu đề sẽ bị xóa. Không có tiêu đề "Content-encoding: gzip", trình duyệt chỉ hiển thị dữ liệu nhị phân được nén gzipped.Với tính năng nén hành động, thông báo lỗi máy chủ xóa tiêu đề mã hóa nội dung và hiển thị dưới dạng gibberish

Tôi đang sử dụng IIS7.5, ASP.NET MVC 2 Preview 2 và một ActionFilter trông như thế này:

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

Bất cứ ai khác có kinh nghiệm này?

Trả lời

11

Cập nhật: Tôi tình cờ gặp bài đăng trên blog của Rick Strahl về vấn đề này và các vấn đề khác về nén. Xem ở đây: http://www.west-wind.com/weblog/posts/2011/May/02/ASPNET-GZip-Encoding-Caveats

Giải pháp của ông, trong đó có vẻ đáng tin cậy hơn, là để đặt sau đây trong Global.asax.cs:

protected void Application_Error(object sender, EventArgs e) 
{ 
    // Remove any special filtering especially GZip filtering 
    Response.Filter = null; 
} 

câu trả lời gốc: tôi cố định này bằng cách áp dụng nén trong OnResultExecuting thay vì OnActionExecuting.

+0

Cũng có thể đánh dấu điều này là câu trả lời của bạn, vì nó hoạt động ... :) –

+0

Điều này đã khiến tôi thất vọng trong nhiều tháng, nhưng tôi đã có ELMAH để xem các lỗi thực sự thay vì vô nghĩa, hạnh phúc để cuối cùng sửa nó:) –