Публикация содержимого GZip с помощью RestSharp

Как опубликовать данные GZip с помощью RestSharp. У меня есть следующий код, но он работает не так, как я ожидал:

var restRequest = new RestRequest(url, Method.POST)
{
    Timeout = Constants.DefaultTimeoutMilliseconds
};

var dataStream = new MemoryStream();

using (var zipStream = new GZipStream(dataStream, CompressionMode.Compress))
{
    using (var writer = new StreamWriter(zipStream))
    {
        writer.Write(new DotNetXmlSerializer().Serialize(content));
    }
}

var compressedBytes = dataStream.ToArray();

restRequest.AddParameter("application/x-gzip", compressedBytes, ParameterType.RequestBody);

return _restClient.Execute<TResponseData>(restRequest);

Когда я запускаю это и проверяю трассировку wirehark, переменная compressedBytes отправляется как 'System.Byte []' - как будто для нее был вызван ToString (), несмотря на то, что параметр является system.object.

Если я передаю сжатый массив байтов в виде строки, используя как Convert.ToBase64String (), так и Encoding.Utf8.GetString (), я не смогу распаковать GZip на сервере. Я просто получаю System.IO.InvalidDataException: магическое число в заголовке GZip неверно. Убедитесь, что вы передаете GZip '.

Есть ли способ опубликовать сжатые данные с помощью RestSharp?


person Barker1889    schedule 23.12.2013    source источник


Ответы (1)


Убедитесь, что вы обновились до последней версии RestSharp (например, 104.4.0), поскольку это была ошибка в предыдущей версии. Я думаю, это было исправлено в версии 104.2, где PUT или POST двоичных данных заканчивались тем, что System.Byte [] представлялся в виде строки.

Обновите ссылку NuGet и попробуйте еще раз. Удачи!

person jbjon    schedule 04.02.2014