6

mam zwyczaj ten filtr dla kompres wyjście z moich stron:OutputCache i filtr niestandardowy kompresja 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"); 
     } 
    } 
} 

Dostałem kod z książki: Pro ASP.NET MVC Framework V2 (Voice eksperta w. NETTO).

Teraz mam metodę działania takiego:

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

Skąd mogę mieć pewność, że filtr OutputCache jest buforowanie skompresowany treści? Korzystanie z parametru "Zamów", jak w tym przykładzie, będzie wystarczające?

Jak mogę zobaczyć, co dzieje się w pamięci podręcznej?

Pozdrawiam.

UPDATE: Ja testowałem z Skrzypek, najwyraźniej to działa bez względu na to jakiej kolejności użyć na filtrach ... dostanę pierwszą odpowiedź z kodowania gzip i http.302 w następujących wniosków, jeśli klient jest można go buforować, lub więcej http.200 z kodowaniem gzip, jeśli tylko serwer jest dozwolony

Prawdopodobnie jest tak dlatego, że OutputCache jest domyślnie ostatnim filtrem i nie ma sposobu, aby to zmienić. Czy ktokolwiek może to potwierdzić?

Odpowiedz

4

Wystarczy popatrzeć na tej stronie http://www.klopfenstein.net/lorenz.aspx/my-take-on-asp-net-output-caching Istnieje kilka dobrych informacji tam szczególnie Jeff Atwood's advice on compressing cache items

Od strony ..

Zamówienie jest ważne

ActionFilter powyżej muszą być bezwzględnie uruchomić ostatnio : jak odkryłem ostatnio, jak tylko filtr akcji zmieni wynik akcji, bieżące wywołanie akcji zostanie przerwane. Oznacza to również, że wszystkie inne filtry akcji, które nie miały szansy uruchomić, nigdy nie będą działać. Jeśli planujesz dodać tę metodę buforowania do swojego projektu, upewnij się, że wszystkie filtry mają właściwy priorytet (używając priorytetu zamówienia, który pobiera dodatnią liczbę całkowitą i liczbę od najniższej do najwyższej).

Powiązane problemy