У меня есть контроллер 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);
}
И это код клиента для вызова ajax, используя jquery:
$.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, это то, что я вижу:
Что мне нужно изменить, чтобы заставить веб-службу возвращать gzipped-контент, который клиент обрабатывает нормально? Я знаю, что я мог бы сделать это с помощью HttpModule или с помощью некоторых параметров в IIS, но ни один из вариантов не соответствует сценарию хостинга:
Обратите внимание, что я не ищу настройки IIS, потому что у меня нет доступа к этому (хостинг).