ASP.NETのWeb APIの戻りを圧縮して返す
.NET FrameworkのASP.NETの話です(Coreは知らない)
Web APIででっかいjson返すようなときにgzipで圧縮してほしい、ってことを定期的に調べているので自分用に書いておきます
自動でやってくれない・・・よね?
準備
Visual Studio 2017で「ASP.NET Web アプリケーション (.NET Framework)」のテンプレート使って新しいプロジェクト作ります。(Web APIのチェック忘れずに)
ValuesController
ができていると思うのでちょっとだけ修正
public IEnumerable<string> Get() { return new string[] { "value", "value", "value", "value", // ・・・ // たくさん返す // "value", "value", "value", }; }
4K以上(?)の戻りでないと圧縮してくれないようなのでたくさん返すようにします
とりあえずこれでIISに発行して上記APIをEdgeで呼んでみます
Accept-Encoding:gzip,deflate
となってますが応答は圧縮されてません
圧縮するようにする
Nugetから下の二つをげと
PM> Install-Package Microsoft.AspNet.WebApi.Extensions.Compression.Server PM> Install-Package System.Net.Http.Extensions.Compression.Client
Global.asax.csに一行追加
protected void Application_Start() { GlobalConfiguration.Configuration.MessageHandlers.Insert(0, new ServerCompressionHandler(new GZipCompressor(), new DeflateCompressor()));
んでやり直し
ちゃんとgzipで圧縮して返してくれました