6

我有壓縮該自定義過濾器我的網頁的輸出:的OutputCache和一個自定義gzip壓縮過濾器

public class EnableCompressionAttribute : ActionFilterAttribute 
{ 
    const CompressionMode compress = CompressionMode.Compress; 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     HttpRequestBase request = filterContext.HttpContext.Request; 
     HttpResponseBase response = filterContext.HttpContext.Response; 
     string acceptEncoding = request.Headers["Accept-Encoding"]; 
     if (acceptEncoding == null) 
      return; 
     if (acceptEncoding.ToLower().Contains("gzip")) 
     { 
      response.Filter = new GZipStream(response.Filter, compress); 
      response.AppendHeader("Content-Encoding", "gzip"); 
     } 
     else if (acceptEncoding.ToLower().Contains("deflate")) 
     { 
      response.Filter = new DeflateStream(response.Filter, compress); 
      response.AppendHeader("Content-Encoding", "deflate"); 
     } 
    } 
} 

我從書中代碼:臨ASP.NET MVC框架V2(專家的聲音英寸淨)。

現在我有一個操作方法是這樣的:

[OutputCache(Order=1, Duration=300,VaryByParam="*", VaryByContentEncoding="gzip; deflate")] 
[EnableCompression(Order=0)] 
public ActionResult About() 
{ 
    return View(); 
} 

我怎麼能保證的OutputCache過濾器緩存壓縮的內容?使用這個例子中的「Order」參數就足夠了?

如何查看緩存中發生了什麼?

乾杯。

更新:我曾與小提琴手測試,顯然它的作品無論你在過濾器使用什麼命令......我與gzip編碼的第一反應,並在下面的請求http.302如果客戶端允許緩存它,或更多http.200與Gzip編碼,如果只是服務器允許

可能這是因爲OutputCache是​​默認的最後一個過濾器,並且沒有辦法改變它。有誰可以證實這一點?

回答

4

看一看這個頁面,http://www.klopfenstein.net/lorenz.aspx/my-take-on-asp-net-output-caching 有一些好的信息有特別Jeff Atwood's advice on compressing cache items

從網頁..

順序很重要

的ActionFilter以上絕對必須運行在去年:正如我最近發現的那樣,只要動作過濾器更改動作結果,就會中止當前的動作調用。這也意味着所有其他沒有機會運行的動作過濾器都不會運行。如果您計劃將此緩存方法添加到項目中,請確保所有過濾器都具有正確的優先級(使用訂單優先級,該優先級取正整數,訂單從最低到最高)。