web-dev-qa-db-fra.com

comment gzip le contenu dans asp.net MVC?

comment compresser l'envoi envoyé par une application asp.net mvc ??

36
Praveen Prasad

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
{...}
85
jim tollan

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.

4
veggerby

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

1
EKS