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.
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
Finally we have to add this action filter above the api method
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.
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.