2009-11-03 19 views
11

Sıkıştırma filtresi kullandığımda ve hatayla karşılaştığımda, hata sayfası yalnızca anlamsız karakterlerdir. Sorun, IIS hata sayfasına aktarıldığında sıkıştırma filtresinin hala geçerli olduğu, ancak başlıkların temizlendiği gibi görünüyor. "Content-encoding: gzip" başlığı olmadan, tarayıcı ham gzipli ikili verileri görüntüler. Ben IIS7.5 kullanıyorumSıkıştırma ActionFilter ile Sunucu hata iletileri, içerik kodlama üstbilgisini temizler ve anlamsızlık olarak iş görür

, ASP.NET MVC 2 önizleme 2 ve şöyle görünür bir ActionFilter: Başka

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

herkes bu deneyimli?

cevap

11

Güncelleme: Rick Strahl'ın bu blog yazısı üzerine ve diğer sıkıştırma sorunları ile karşılaştım. Buraya bakın: http://www.west-wind.com/weblog/posts/2011/May/02/ASPNET-GZip-Encoding-Caveats

daha güvenilir görünüyor Onun çözümü, Global.asax.cs aşağıdaki koymaktır:

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

Orjinal cevap: ben sıkıştırma uygulayarak bu sabit OnActionExecuting yerine OnResultExecuting.

+0

Bunun için cevabınız olarak işaretleyiniz, çünkü işe yaradığı için ... :) –

+0

Bu aylar boyunca beni hayal kırıklığına uğratıyordu, ama gerçek hataları yerine anlamsızca görmek için ELMAH'm vardı, sonunda onu düzeltmek için mutlu oldum:) –

İlgili konular