Когда я применяю сжатие gzip или deflate к своим HTTP-ответам, я, похоже, теряю последнюю скобку в моих структурах JSON.Например:
Результат без сжатия:
{"alist":{"P_1":0,"P_2":0,"P_3":0}}
Результат со сжатием, полученным браузером:
{"alist":{"P_1":0,"P_2":0,"P_3":0}
При написании ответа без сжатия Я делаю следующее:
byte[] buffer = Encoding.UTF8.GetBytes(responseContent);
context.Response.ContentLength64 = buffer.Length;
context.Response.ContentType = ContentTypeJson;
Stream outputStream = context.Response.OutputStream;
outputStream.Write(buffer, 0, buffer.Length);
outputStream.Close();
В качестве альтернативы, когда вызывающая сторона предоставляет заголовок запроса Accept-Encoding, я пытаюсь написать ответ со сжатием следующим образом;
byte[] buffer = Encoding.UTF8.GetBytes(responseContent);
byte[] compressedBuffer;
using (var memoryStream = new MemoryStream())
{
using (Stream compressionStream = new DeflateStream(memoryStream, CompressionMode.Compress, false))
{
compressionStream.Write(buffer, 0, buffer.Length);
compressedBuffer = memoryStream.ToArray();
compressionStream.Close();
}
memoryStream.Close();
}
context.Response.ContentLength64 = compressedBuffer.Length;
context.Response.ContentType = ContentTypeJson;
Stream outputStream = context.Response.OutputStream;
outputStream.Write(compressedBuffer, 0, compressedBuffer.Length);
outputStream.Close();
Если это поможет, я использую System.Net.HttpListener, поэтому я должен сделать это сам.У кого-нибудь есть идеи, почему это усечение может происходить?