System.IO.InvalidDataException: «Запись архива была сжата с использованием неподдерживаемого метода сжатия».C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 System.IO.InvalidDataException: «Запись архива была сжата с использованием неподдерживаемого метода сжатия».

Сообщение Anonymous »

Я использую ASP.NET Core 6.0. У меня есть API, который возвращает сжатые данные. Упрощенная версия моего кода выглядит так:

Код: Выделить всё

[HttpPost("[action]", Name = "GetData")]
public IActionResult GetData(string request)
{
string data = GetStaticXMLFileData();
data = CompressString(data);

return new ContentResult
{
Content = data,
ContentType = "text/xml",
StatusCode = (int)HttpStatusCode.OK
};
}

private string CompressString(string text)
{
string compressedString;

using (var memoryStream = new MemoryStream())
{
using (var gZipStream = new GZipStream(memoryStream, CompressionMode.Compress, true))
{
using (var writer = new StreamWriter(gZipStream, Encoding.UTF8))
{
writer.Write(text);
}

byte[] compressedData = memoryStream.ToArray();

compressedString = System.Text.Encoding.UTF8.GetString(compressedData);
}
}

return compressedString;
}
Эта конечная точка API работает хорошо, и я проверил ее с помощью Swagger.
Теперь я пытаюсь использовать их в своем клиентском коде, как показано ниже. :

Код: Выделить всё

private string GetDataAPIResponse()
{
string httpResponse = string.Empty;

var urlValue = string.Format("https://localhost:44314/api/CompressedData/GetData?compress=true&result_format=xml");
var requestUri = new Uri(urlValue);

var buffer = System.Text.Encoding.UTF8.GetBytes("Test"); //Sample Data Request
var byteContent = new ByteArrayContent(buffer);

using (var httpClient = new HttpClient())
{
using (var response = httpClient.PostAsync(requestUri, byteContent).GetAwaiter().GetResult())
{
response.EnsureSuccessStatusCode();

if (response.IsSuccessStatusCode && response.StatusCode == HttpStatusCode.OK)
{
Task task = response.Content.ReadAsStreamAsync();
task.Wait();
Stream responseStream = Constants.IsCompressed ?
new GZipStream(task.Result, CompressionMode.Decompress) :
task.Result;

if (responseStream != null)
{
using (var readStream = new StreamReader(responseStream, Encoding.UTF8))
httpResponse = readStream.ReadToEnd(); //Here, I got the Error.
}
}
}

return httpResponse;
}
}
Мне не удалось получить распакованный ответ с помощью этого кода.
В этой строке кода я получаю сообщение об ошибке:

Код: Выделить всё

httpResponse = readStream.ReadToEnd();
Ошибка:

System.IO.InvalidDataException: запись архива была сжата с использованием неподдерживаемого метода сжатия
Ошибка:

System.IO.InvalidDataException: запись в архиве была сжата с использованием неподдерживаемого метода сжатия
Ошибка:

System.IO.InvalidDataException: запись архива была сжата с использованием неподдерживаемого метода сжатия
p>

Stacktrace:

at System.IO.Compression.Inflater.Inflate(FlushCodelushCode )

at System.IO.Compression.Inflater.ReadInflateOutput(Byte* bufPtr, Int32 length, FlushCodelushCode, Int32& bytesRead)

at System.IO.Compression.Inflater.ReadOutput(Byte* bufPtr, Int32 длина, Int32& bytesRead)

at System.IO.Compression.Inflater.InflateVerified(Byte* bufPtr, длина Int32)

at System.IO.Compression.DeflateStream.ReadCore(буфер Span`1)

at System.IO.Compression.DeflateStream.Read(буфер Byte[], смещение Int32, счетчик Int32)

at System.IO.Compression.GZipStream.Read(буфер Byte[], смещение Int32, счетчик Int32)

в System.IO.StreamReader.ReadBuffer()

в System. IO.StreamReader.ReadToEnd()

Может кто-нибудь предложить мне решение?

Подробнее здесь: https://stackoverflow.com/questions/792 ... g-an-unsup
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»