استفاده از کامپوننت GZip برای فشرده سازی Web API

shape
shape
shape
shape
shape
shape
shape
shape

اطلاعات و داده ها در وبسایت به صورت پکیج توسط شبکه اینترنت به سرور ارسال می شود ، حجم این پیکج ها یکی از عامل های مهم در سرعت و عملکرد وبسایت می باشد ، فشرده سازی این داده ها در کاهش حجم تاثیر بسزایی دارد( استفاده از کامپوننت GZip برای فشرده سازی Web API ). در این مقاله با چگونگی فشرده سازی توسط GZip آشنا می شویم .

برای فشرده سازی از افزونه های زیادی می توان استفاده کرد ولی در این مقاله ما قصد داریم با کامپوننت DotNetZip که از NuGet قابل دانلود است استفاده کنیم به همین منظور برروی نام پروژه راست کلیک کرده و گزینه Mannage Package Console را کلیک کرده و در پنجره ظاهر شده عبارت DotNetZip را جست و جو میکنیم ، در تصویر زیر بعد از زدن کلید Install تیک سبزی کنار پکیج مشاهده میکنید که نشان دهنده اضافه شدن به پروژه است.

 استفاده از کامپوننت GZip برای فشرده سازی Web API

سپس بعد از مراحل فوق (ایجاد پروژه ، اضافه کردن DotNetZip) اقدام به ایجاد پوشه ای با نام Filters در پروژه و سپس در آن یک کلاس به نام CompressFilter.cs ایجاد می کنیم.

 استفاده از کامپوننت GZip برای فشرده سازی Web API

کد های زیر نشان دهنده کلاس CompressFilter.cs هستند.

using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Net.Http;
using System.Web;
using System.Web.Http.Filters;
namespace Test.API.Filters
{
public class DeflateCompressionAttribute: ActionFilterAttribute
{
public override void OnActionExecuted(HttpActionExecutedContext actContext)
{
var content = actContext.Response.Content;
string contentencoding = ApiHeaderValue.AppContentEncoding.ToString();
if (contentencoding == “GZip”)
{
var bytes = content == null ? null : content.ReadAsByteArrayAsync().Result;
var zlibbedContent = bytes == null ? new byte[0] :
CompressionHelper.DeflateByte(bytes);
actContext.Response.Content = new ByteArrayContent(zlibbedContent);
actContext.Response.Content.Headers.Remove(“Content-Type”);
actContext.Response.Content.Headers.Add(“Content-encoding”, “GZip”);
actContext.Response.Content.Headers.Add(“Content-Type”, “application/json”);
base.OnActionExecuted(actContext);
}
}
}
public class CompressionHelper
{
public static byte[] DeflateByte(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();
}
}
}
}

در کلاس قبل متغیر با نام contentencoding ایجاد می کنیم.
سپس در آن سه مقدار در نظر می گیریم GZip/Deflate/No اگر No پاس داده شد بود اطلاعات به روش Json اطلاعات را بر میگرداند.

سپس از کلاس زیر استفاده می کنیم به عنوان متد ارسالی.

 استفاده از کامپوننت GZip برای فشرده سازی Web API

 

منبع

 

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *