Saturday, 10 June 2017

Compressing web api response using GZip

In this post we are going to see how to create a compressed web api response to user,  because of compressing the result content-length will be less and it is more faster in get response. First let we create a new Web Api project.

    public class Student
    {
        public int Id { get; set; }

        public string Name { get; set; }

        public string Department { get; set; }

        public int Marks { get; set; }

    }

   public IEnumerable<Student> Get()
   {
            List<Student> studs = new List<Student>();
            studs.Add(new Student() { Id = 1, Name = "rajesh",
Department ="CSE", Marks=83});
            studs.Add(new Student() { Id = 2, Name = "suresh",
Department = "ECE", Marks=92  });
            studs.Add(new Student() { Id = 2, Name = "ramesh",
Department = "CSE", Marks = 76 });
            studs.Add(new Student() { Id = 2, Name = "ramu",
Department = "ECE", Marks = 94 });
            return studs;

    }

From the above code we can see the student list is returning, now we test this in post man rest client.









from the above , you can see the result is content-length is 219, now we will enable the GZip compression. For this we have to create actionFilterAttribute there we have to set the content-encoding as gzip. we have to add a package DotnetZip from nuget package manager


public class GZipCompression
    {
        public static byte[] GzipByte(byte[] input)
        {
            if (input == null)
                return null;
            using (var result= new MemoryStream())
            {
                using(var compress = new Ionic.Zlib.GZipStream(result,
Ionic.Zlib.CompressionMode.Compress))
                {
                    compress.Write(input, 0, input.Length);
                }
                return result.ToArray();
            }
        }
    }



public class ZipCompressionAttribute:ActionFilterAttribute
    {
        public override void OnActionExecuted(HttpActionExecutedContext                                                actionExecutedContext)
        {
            var content = actionExecutedContext.Response.Content;
            var bytes = content == null ? null : content.ReadAsByteArrayAsync().Result;
            var compressedContent = bytes == null ? new byte[0] :                                                                            GZipCompression.GzipByte(bytes);

            actionExecutedContext.Response.Content = new ByteArrayContent(compressedContent);
            actionExecutedContext.Response.Content.Headers.Remove("Content-Type");
            actionExecutedContext.Response.Content.Headers.Add("Content-encoding", "gzip");
            actionExecutedContext.Response.Content.Headers.Add("Content-Type",                                                                             "application/json");
            base.OnActionExecuted(actionExecutedContext);
        }

    }


Finally we have to add this action filter above the api method

[ZipCompression]
public IEnumerable<Student> Get()
{
            List<Student> studs = new List<Student>();
            studs.Add(new Student() { Id = 1, Name = "rajesh",
Department ="CSE", Marks=83});
            studs.Add(new Student() { Id = 2, Name = "suresh",
Department = "ECE", Marks=92  });
            studs.Add(new Student() { Id = 2, Name = "ramesh",
Department = "CSE", Marks = 76 });
            studs.Add(new Student() { Id = 2, Name = "ramu",
Department = "ECE", Marks = 94 });
            return studs;

}


Now we see the response in post man client, content-length will be reduced.











From this post you can learn how to create a compressing web api response using Gzip.

6 comments:

  1. Very Nice tutorial. Really helpful for a lot of information about ASP …. Please keep update some more…………

    ReplyDelete
  2. This is an amazing blog,it gives very helpful messages to us.Besides that Wisen has established as Best Dot Net Training in Chennai. or learn thru ASP.NET Online Training . Nowadays Dot Net has tons of job opportunities on various vertical industry.

    ReplyDelete
  3. Australia Best Tutor is one of the best Online Assignment Help providers at an affordable price. Here All Learners or Students are getting best quality assignment help with reference and styles formatting.

    Visit us for more Information

    Australia Best Tutor
    Sydney, NSW, Australia
    Call @ +61-730-407-305
    Live Chat @ https://www.australiabesttutor.com




    Our Services

    Online assignment help
    my assignment help Student
    Assignment help Student
    help with assignment Student
    Students instant assignment help
    Students Assignment help Services

    ReplyDelete