В процессе повышения производительности моего бэкэнда я добавил глобальный атрибут сжатия, который, как я вижу из chrome dev tool, действительно уменьшил полезную нагрузку, но, к сожалению, создал ряд ошибок во внешнем интерфейсе, где я использую Angular 6.
Когда я пытаюсь увидеть ответ в инструментах разработчика, я получаю что-то вроде изображения ниже и постоянно выбрасываю консоль
**Error: Uncaught (in promise): Http failure during parsing for** errors.
Я установил тип атрибута сжатия и угловой перехватчик тип контентакак
application/json
ниже указан мой атрибут сжатия
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
public class CompressionAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(HttpActionExecutedContext actionContext)
{
var isCompressionSupported = CompressionHelper.IsCompressionSupported(actionContext);
//string acceptEncoding = HttpContext.Current.Request.Headers["Accept-Encoding"];
var acceptEncoding = actionContext.Request.Headers.AcceptEncoding.ToString();
if (isCompressionSupported && actionContext.Response != null)
{
try
{
var content = actionContext.Response.Content;
var byteArray = content?.ReadAsByteArrayAsync().Result;
var memoryStream = new MemoryStream(byteArray ?? throw new InvalidOperationException("byte array is null"));
if (acceptEncoding.Contains("gzip"))
{
actionContext.Response.Content = new ByteArrayContent(CompressionHelper.Compress(memoryStream.ToArray(), false));
actionContext.Response.Content.Headers.Remove("Content-Type");
actionContext.Response.Content.Headers.Add("Content-encoding", "gzip");
actionContext.Response.Content.Headers.Add("Content-Type", "application/json");
}
else
{
actionContext.Response.Content = new ByteArrayContent(CompressionHelper.Compress(memoryStream.ToArray()));
actionContext.Response.Content.Headers.Remove("Content-Type");
actionContext.Response.Content.Headers.Add("Content-encoding", "deflate");
actionContext.Response.Content.Headers.Add("Content-Type", "application/json");
}
}
catch(Exception ex)
{
OtherBarryHelper.SendError("Compression Attribute Error: ", ex);
}
}
base.OnActionExecuted(actionContext);
}
}
public class CompressionHelper
{
public static byte[] Compress(byte[] data, bool useGZipCompression = true)
{
System.IO.Compression.CompressionLevel compressionLevel = System.IO.Compression.CompressionLevel.Fastest;
using (MemoryStream memoryStream = new MemoryStream())
{
if (useGZipCompression)
{
using (System.IO.Compression.GZipStream gZipStream = new System.IO.Compression.GZipStream(memoryStream,compressionLevel, true))
{
gZipStream.Write(data, 0, data.Length);
}
}
else
{
using (System.IO.Compression.GZipStream gZipStream = new System.IO.Compression.GZipStream(memoryStream,compressionLevel, true))
{
gZipStream.Write(data, 0, data.Length);
}
}
return memoryStream.ToArray();
}
}
public static bool IsCompressionSupported(HttpActionExecutedContext actionContext)
{
string AcceptEncoding = actionContext.Request.Headers.AcceptEncoding.ToString();
//string AcceptEncoding = HttpContext.Current.Request.Headers["Accept-Encoding"];
return ((!string.IsNullOrEmpty(AcceptEncoding) && (AcceptEncoding.Contains("gzip") || AcceptEncoding.Contains("deflate"))));
}
}
}
Любая помощь?
Спасибо заранее.