1 using System.Web.Http.Filters; 2 using System; 3 using System.Net.Http.Headers; 4 using System.Text; 5 using System.Collections.Generic; 6 using System.Web.Http; 7 using System.Web.Http.Controllers; 8 using System.Linq.Expressions; 9 using System.Linq; 10 using System.Reflection; 11 using System.Collections; 12 using System.Threading; 13 using System.Net.Http.Formatting; 14 using System.Net; 15 using System.Threading.Tasks; 16 using System.Runtime.Caching; 17 using System.IO; 18 using Ionic.Zip; 19 using System.Net.Http; 20 21 22 namespace Compress 23 { 24 public class DeflateCompressionAttribute : System.Web.Http.Filters.ActionFilterAttribute 25 { 26 public override void OnActionExecuted(HttpActionExecutedContext actContext) 27 { 28 var content = actContext.Response.Content; 29 var bytes = content == null ? null : content.ReadAsByteArrayAsync().Result; 30 var zlibbedContent = bytes == null ? new byte[0] : 31 CompressionHelper.DeflateByte(bytes); 32 actContext.Response.Content = new ByteArrayContent(zlibbedContent); 33 actContext.Response.Content.Headers.Remove("Content-Type"); 34 actContext.Response.Content.Headers.Add("Content-encoding", "gzip"); 35 actContext.Response.Content.Headers.Add("Content-Type", "application/json"); 36 base.OnActionExecuted(actContext); 37 } 38 } 39 40 public class CompressionHelper 41 { 42 public static byte[] DeflateByte(byte[] str) 43 { 44 if (str == null) 45 { 46 return null; 47 } 48 49 using (var output = new MemoryStream()) 50 { 51 using ( 52 var compressor = new Ionic.Zlib.GZipStream( 53 output, Ionic.Zlib.CompressionMode.Compress, 54 Ionic.Zlib.CompressionLevel.BestSpeed)) 55 { 56 compressor.Write(str, 0, str.Length); 57 } 58 59 return output.ToArray(); 60 } 61 } 62 } 63 64 // [DeflateCompressionAttribute] 65 //public ActionResult Index() 66 //{ 67 // return View(); 68 //} 69 70 71 }