Ce qui suit est une façon courante de créer un attribut de filtre de compression:
public class CompressFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext actionContext)
{
HttpRequestBase request = actionContext.HttpContext.Request;
string acceptEncoding = request.Headers["Accept-Encoding"];
if (!string.IsNullOrWhiteSpace(acceptEncoding))
{
acceptEncoding = acceptEncoding.ToLowerInvariant();
HttpResponseBase response = actionContext.HttpContext.Response;
if (acceptEncoding.Contains("gzip"))
{
response.AddHeader("Content-encoding", "gzip");
response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
}
else if (acceptEncoding.Contains("deflate"))
{
response.AddHeader("Content-encoding", "deflate");
response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
}
}
}
}
Maintenant, vous pouvez décorer votre contrôleur avec un attribut [CompressFilter]
. Il ajoutera un en-tête de compression à la réponse pour les navigateurs qui le supportent, que IIS va détecter. Si vous avez activé la compression dynamique, IIS affiche les réponses compressées.
pouvez-vous montrer quel type de données vous échangez? – Neutralizer
Si ce n'est déjà fait, je vous recommande d'utiliser JSON pour votre échange de données AJAX. MVC possède des fonctionnalités qui rendent le travail avec JSON très facile. – BradB
J'utilise JSON pour mes requêtes, mais parfois il est gros (environ 60 kBytes). Donc, je veux le compresser – Egor4eg