comment compresser l'envoi envoyé par une application asp.net mvc ??
Voici ce que j'utilise (à compter de ce jour):
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);
}
}
}
utilisation dans le contrôleur:
[Compress]
public class BookingController : BaseController
{...}
il existe d'autres variantes, mais cela fonctionne assez bien. (Au fait, j’utilise l’attribut [Compress] de mon BaseController pour éviter les doublons dans le projet, alors que ce qui précède le fait contrôleur par contrôleur.
[Edit] comme mentionné dans le paragraphe ci-dessus. Pour simplifier l'utilisation, vous pouvez également inclure [Compress]
onehot dans BaseController lui-même. Ainsi, chaque contrôleur enfant hérité accède à la fonctionnalité par défaut:
[Compress]
public class BaseController : Controller
{...}
Jetez un oeil à cet article qui décrit une méthode astucieuse utilisant des filtres d'action.
Par exemple:
[CompressFilter]
public void Category(string name, int? page)
Et en prime, il inclut également un CacheFilter.
Pour .NET Core 2.1, un nouveau package pouvant être utilisé (Microsoft.AspNetCore.ResponseCompression)
Exemple simple pour commencer, après avoir installé le paquet:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCompression();
services.AddResponseCompression(options =>
{
options.Providers.Add<GzipCompressionProvider>();
options.EnableForHttps = true;
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseResponseCompression();
}
}
Vous pouvez en savoir plus à ce sujet ici: https://docs.Microsoft.com/en-us/aspnet/core/performance/response-compression?view=aspnetcore-2.1&tabs=aspnetcore2x