jak skompresować dane wyjściowe wysyłane przez aplikację asp.net mvc?jak spakować zawartość w asp.net MVC?
Odpowiedz
Oto co mogę użyć (jak tego monent w czasie):
using System.IO.Compression;
public class CompressAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var encodingsAccepted = filterContext.HttpContext.Request.Headers["Accept-Encoding"];
if (string.IsNullOrEmpty(encodingsAccepted)) return;
encodingsAccepted = encodingsAccepted.ToLowerInvariant();
var response = filterContext.HttpContext.Response;
if (encodingsAccepted.Contains("deflate"))
{
response.AppendHeader("Content-encoding", "deflate");
response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
}
else if (encodingsAccepted.Contains("gzip"))
{
response.AppendHeader("Content-encoding", "gzip");
response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
}
}
}
użytkowania w kontrolerze:
[Compress]
public class BookingController : BaseController
{...}
Istnieją inne warianty, ale działa to całkiem dobrze. (Btw, używam [Compress] atrybut na moim BaseController zapisać powielania całego projektu, natomiast powyżej robi to na kontrolerze przez podstawę regulatora.
[Edytuj] jak wspomniano w ust powyżej. Do uproszczenie wykorzystania, można także [Compress]
Oneshot w samej BaseController, co każdy dziedziczone kontroler dziecko ma dostęp do funkcjonalności domyślnie.
[Compress]
public class BaseController : Controller
{...}
sama koncepcja :) prawie identyczny kod – veggerby
faktycznie, spojrzał na twój przykład - bardzo podobny - straszny :). Używam tego kodu od ponad roku, więc mogę sprawdzić, czy działa bardzo dobrze ... –
jest możliwe, mogę zrobić niektóre ustawienia w web.config, aby zrobić kompresję. jeszcze jedna rzecz, którą chcę wiedzieć, jak sprawdzić, jak bardzo narzut jest dodawany do serwera przez kod kompresji, który tutaj uruchamiamy. –
Zapraszamy do obejrzenia tego artykułu, który nakreśla sposób sprytne wykorzystanie Filtry Action
np
[CompressFilter]
public void Category(string name, int? page)
I jako bonus, to zawiera również CacheFilter
okie, testowanie tego, jeszcze jedna rzecz, którą chcę wiedzieć, w jaki sposób mogę sprawdzić, czy dane otrzymywane z serwera są gzipowane czy nie? –
Użyj Firebug tak jak w artykule i spójrz na nagłówek odpowiedzi – veggerby
Nie działa w MVC5, IIS 8.5 i .Net 4.5, każda pomoc będzie doceniona. –
można również zwiększyć wydajność przy użyciu kompresji i buforowania danych odpowiedzi Spójrz na poniższy link: -
http://weblogs.asp.net/rashid/asp-net-mvc-action-filter-caching-and-compression
Dlaczego nie wystarczy ustawić ' ' 'lub nawet ' 'web.comfig' w http://www.iis.net/configreference/system.webserver/httpcompression http://stackoverflow.com/questions/9235337/gzipping-content-files-in-asp-net-mvc-3? –
Kuncevic