HttpResponseMessage を返すときの WebAPI Gzip 質問する

HttpResponseMessage を返すときの WebAPI Gzip 質問する

を返す WebAPI コントローラーがありHttpResponseMessage、gzip 圧縮を追加したいと考えています。これがサーバー コードです:

using System.Net.Http;
using System.Web.Http;
using System.Web;
using System.IO.Compression;

[Route("SomeRoute")]
public HttpResponseMessage Post([FromBody] string value)
{
    HttpContext context = HttpContext.Current;

    context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);

    HttpContext.Current.Response.AppendHeader("Content-encoding", "gzip");
    HttpContext.Current.Response.Cache.VaryByHeaders["Accept-encoding"] = true;

    return new SomeClass().SomeRequest(value);
}

これは、jQuery を使用した Ajax 呼び出しのクライアント コードです。

$.ajax({
    url: "/SomeRoute",
    type: "POST",
    cache: "false",
    data: SomeData,
    beforeSend: function (jqXHR) { jqXHR.setRequestHeader('Accept-Encoding', 'gzip'); },
    success: function(msg) { ... }

これを実行すると、サーバー コードはバグなしで返されますが、クライアント コードはバグになります。

(failed)
net::ERR_CONTENT_DECODING_FAILED

ここに画像の説明を入力してください

Fiddler で見ると、次のようになります。

ここに画像の説明を入力してください

Web サービスがクライアントが通常どおり処理する gzip 圧縮されたコンテンツを返すようにするには、何を変更する必要がありますか? HttpModule または IIS の設定を使用してこれを行うこともできることはわかっていますが、どちらのオプションもホスティングのシナリオに適合しません。

ここに画像の説明を入力してください

IIS 設定を探しているのではないことに注意してください。その設定 (ホスティング) にアクセスできないためです。

ベストアンサー1

次の NuGet パッケージを追加します。

Microsoft.AspNet.WebApi.Extensions.Compression.Server System.Net.Http.Extensions.Compression.Client

次に、次の 1 行のコードを追加しますApp_Start\WebApiConfig.cs

GlobalConfiguration.Configuration.MessageHandlers.Insert(0, new ServerCompressionHandler(new GZipCompressor(), new DeflateCompressor()));

それでうまくいくでしょう!

詳細:

**@JCisar からのコメントを受けて更新

ASP.Net Core のアップデート

NuGetパッケージは

Microsoft.AspNetCore.レスポンス圧縮

おすすめ記事