Close Menu
Código Simples .NETCódigo Simples .NET
    Facebook X (Twitter) Instagram
    Trending
    • Estratégias de Resiliência para Microservices: Aplicando Back-pressure e Bulkhead com Eficiência
    • Potencializando o MongoDB com IA: Conheça o MCP Server da MongoDB
    • Guia Completo: Integrando o MCP com Atlassian
    • Model Context Protocol (MCP): O Futuro da Interação com Modelos de IA
    • Processamento Assíncrono: Os Desafios da Escalabilidade
    • NewSQL em 2025: O Estado Atual, Tendências e o Futuro dos Bancos de Dados Relacionais Escaláveis
    • 12 Regras Essenciais para Reduzir a Latência de Aplicações
    • Cache Hit Ratio: Como uma Simples Métrica Pode Revolucionar sua Arquitetura
    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 25mil outros assinantes
    Posts recentes
    • Estratégias de Resiliência para Microservices: Aplicando Back-pressure e Bulkhead com Eficiência
    • Potencializando o MongoDB com IA: Conheça o MCP Server da MongoDB
    • Guia Completo: Integrando o MCP com Atlassian
    • Model Context Protocol (MCP): O Futuro da Interação com Modelos de IA
    • Processamento Assíncrono: Os Desafios da Escalabilidade
    Categorias
    • Arquitetura (16)
      • Microsserviços (1)
      • Testes (2)
    • Asp.net (120)
      • C# (89)
      • Mvc (13)
    • Banco de dados (91)
      • NoSql (59)
      • Sql (38)
    • Boas práticas (30)
      • Gestão & Produtividade (2)
      • Metodologias Ágeis (6)
    • Cursos (52)
    • Dicas (105)
    • Front-End (92)
    • IA (4)
    • 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

    Facebook X (Twitter) Instagram LinkedIn

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

    Vá para versão mobile