Close Menu
Código Simples .NETCódigo Simples .NET
    Facebook X (Twitter) Instagram
    Trending
    • Structured Prompt-Driven Development: quando o prompt deixa de ser conversa e vira artefato de engenharia
    • Observabilidade para agentes: por que logs e traces tradicionais já não bastam
    • Context engineering: quando o problema deixa de ser prompt e vira arquitetura
    • Clean Code (2ª edição): o que mudou e o que continua valendo
    • Sunk Cost em Arquitetura de Software: como evitar que meses de investimento virem uma armadilha
    • Guia Profissional de Prompting – Domando um ChatGPT Preguiçoso: Como Obter Respostas Completas, Profundas e Confiáveis
    • A Anatomia de um Prompt: Como Falar com a IA Como um Profissional de Tecnologia
    • Conheça os tipos de registros DNS: o guia completo sobre A, AAAA, NS, CNAME, MX, PTR, SOA, TXT, SRV, SPF e muito mais
    Facebook X (Twitter) Instagram
    Código Simples .NETCódigo Simples .NET
    Código Simples .NETCódigo Simples .NET
    Home»Asp.net»Comprimindo requisições da WebAPI usando o DotNetZip

    Comprimindo requisições da WebAPI usando o DotNetZip

    Jhonathan SoaresBy Jhonathan Soares15 de março de 20172 Mins Read Asp.net
    Share
    Facebook Twitter LinkedIn WhatsApp Copy Link

    WebAPI é muito popular para a construção de serviços RESTful em. NET e desempenho sempre ocupa um papel vital em qualquer aplicação. No caso de grande quantidade de dados passando pelo tráfego de rede, isto pode se tornar um problema de performance importante.

    A compressão é uma boa técnica para reduzir o tamanho dos dados de resposta e aumentar a velocidade de comunicação entre um cliente e um recurso remoto.

    Aqui, vamos usar DotNetZip para compactar o tamanho da resposta da nossa WebAPI.

    A primeira coisa a se fazer (já considerando que você tenha seu projeto de WebAPI criado), temos que instalar a DotnetZip Library através do “gerenciador de pacotes NuGet”.

    Agora, adicione uma classe chamada GzipCompression.cs, recomendo você criar uma pasta dentro do seu projeto, com o intuito de ficar mais legível, eu criei uma pasta chamada “Filters”

    Escreva o código abaixo neste documento:

       public class GzipCompressionAttribute : ActionFilterAttribute  
        {  
            public override void OnActionExecuted(HttpActionExecutedContext actionContext)  
            {  
                var content = actionContext.Response.Content;  
                var bytes = content == null ? null : content.ReadAsByteArrayAsync().Result;  
                var zlibbedContent = bytes == null ? new byte[0] :  
                CompressionHelper.GzipByte(bytes);  
                actionContext.Response.Content = new ByteArrayContent(zlibbedContent);  
                actionContext.Response.Content.Headers.Remove("Content-Type");  
                actionContext.Response.Content.Headers.Add("Content-encoding", "gzip");  
                actionContext.Response.Content.Headers.Add("Content-Type", "application/json");  
                base.OnActionExecuted(actionContext);  
            }  
        }  
      
        public class CompressionHelper  
        {  
            public static byte[] GzipByte(byte[] str)  
            {  
                if (str == null)  
                {  
                    return null;  
                }  
      
                using (var output = new MemoryStream())  
                {  
                    using (var compressor = new Ionic.Zlib.GZipStream(output, Ionic.Zlib.CompressionMode.Compress, Ionic.Zlib.CompressionLevel.BestSpeed))  
                    {  
                        compressor.Write(str, 0, str.Length);  
                    }  
                    return output.ToArray();  
                }  
            }  
        }  

    No código dado acima, estamos herdando a classe ActionFilterAttribute para substituir o método OnActionExecuted (com um override) e também precisamos de uma classe auxiliar para executar a compactação.

    Agora, basta colocar esse atributo ActionFilter acima do método desejado em sua controller, como mostrado abaixo.

    	[GzipCompression]  
        public IHttpActionResult GetEmployeeData()  
        {  
            List<Employee> employee = new List<Employee>  
            {  
                new Employee { Id = "1", Name = "Joao", Address = "Sao Paulo" },  
                new Employee { Id = "2", Name = "Maria", Address = "Belo Horizonte" },  
                new Employee { Id = "3", Name = "Jose", Address = "Manaus" },  
                new Employee { Id = "4", Name = "Pedro", Address = "Salvador" },  
                new Employee { Id = "5", Name = "Hugo", Address = "Curitiba" }
            };  
    
            return Ok(employee);  
        }  
    
    	public class Employee  
    	{  
    		public string Id { get; set; }  
    		public string Name { get; set; }  
    		public string Address{ get; set; }  
    	}   

    Desta maneira fácil, podemos compactar dados de resposta e aumentar o desempenho da aplicação diminuindo a quantidade de bytes trafegados pela rede.

    Você pode ler mais sobre o assunto aqui e aqui, com outros exemplos implementados.

    Um grande abraço e até a próxima!

    Share. Facebook Twitter LinkedIn Telegram WhatsApp Copy Link
    Jhonathan Soares
    • Website
    • Facebook
    • X (Twitter)
    • LinkedIn

    Criador do blog Código Simples e com mais 15 anos de experiência em TI, com títulos de MVP Microsoft na área de Visual Studio Development, Neo4j Top 50 Certificate, Scrum Master e MongoDB Evangelist.

    Posts Relacionados

    O que é a Ecma e qual é sua relação com C#?

    C# Post do Leitor 29 de julho de 20247 Mins Read

    Boas práticas de criação, armazenamento e validação de senhas em .NET

    Asp.net Boas práticas 9 de julho de 20248 Mins Read

    UUID vs ULID: comparação e exemplos em C#

    C# 19 de junho de 20245 Mins Read
    Newsletter

    Digite seu endereço de e-mail para receber notificações de novas publicações por e-mail.

    Junte-se a 24mil outros assinantes
    Posts recentes
    • Structured Prompt-Driven Development: quando o prompt deixa de ser conversa e vira artefato de engenharia
    • Observabilidade para agentes: por que logs e traces tradicionais já não bastam
    • Context engineering: quando o problema deixa de ser prompt e vira arquitetura
    • Clean Code (2ª edição): o que mudou e o que continua valendo
    • Sunk Cost em Arquitetura de Software: como evitar que meses de investimento virem uma armadilha
    Categorias
    • Arquitetura (32)
      • Microsserviços (3)
      • Testes (2)
    • Asp.net (120)
      • C# (89)
      • Mvc (13)
    • Banco de dados (93)
      • NoSql (60)
      • Sql (38)
    • Boas práticas (35)
      • Gestão & Produtividade (5)
      • Metodologias Ágeis (6)
    • Cursos (53)
    • Dicas (108)
    • Front-End (92)
    • IA (9)
    • Linux (6)
    • NodeJS (4)
    • Post do Leitor (9)
    • Python (5)
    • Seo (12)
    • Tecnologia (30)
      • ITIL (1)
      • Padrões de Projeto (4)
    • Testes (2)

    VEJA TAMBÉM

    Cursos
    12 de fevereiro de 20166 Mins Read

    1000 livros gratuitos sobre programação!

    Olha que dica bacana! A pagina só com livros sobre programação é mantida no GitHub…

    30 APIs Gratuitas para desenvolvedores

    Código Simples no Facebook
    Código Simples no Facebook
    • Popular
    • Recente

    1000 livros gratuitos sobre programação!

    12 de fevereiro de 2016

    Google lança versão “invisível” do reCAPTCHA!

    10 de março de 2017

    Mini curso de HTML5 oferecido pela Microsoft

    30 de janeiro de 2014

    O que significa ( !important ) na declaração do CSS ?

    5 de fevereiro de 2014

    Programa para supercompactar arquivos. KGB Archiver.

    6 de fevereiro de 2014

    Structured Prompt-Driven Development: quando o prompt deixa de ser conversa e vira artefato de engenharia

    28 de abril de 2026

    Observabilidade para agentes: por que logs e traces tradicionais já não bastam

    23 de abril de 2026

    Context engineering: quando o problema deixa de ser prompt e vira arquitetura

    16 de abril de 2026

    Clean Code (2ª edição): o que mudou e o que continua valendo

    12 de fevereiro de 2026

    Sunk Cost em Arquitetura de Software: como evitar que meses de investimento virem uma armadilha

    4 de fevereiro de 2026
    Nosso Feed
    • RSS - Posts
    Fique por dentro

    Digite seu endereço de email para assinar este blog e receber notificações de novas publicações por email.

    Facebook X (Twitter) Instagram LinkedIn

    Type above and press Enter to search. Press Esc to cancel.

    Vá para versão mobile