Ошибка Http во время синтаксического анализа (Angular 6) после применения атрибута Compression (Web Api) - PullRequest
0 голосов
/ 26 сентября 2018

В процессе повышения производительности моего бэкэнда я добавил глобальный атрибут сжатия, который, как я вижу из chrome dev tool, действительно уменьшил полезную нагрузку, но, к сожалению, создал ряд ошибок во внешнем интерфейсе, где я использую Angular 6.

Когда я пытаюсь увидеть ответ в инструментах разработчика, я получаю что-то вроде изображения ниже и постоянно выбрасываю консоль

 **Error: Uncaught (in promise): Http failure during parsing for** errors.

Я установил тип атрибута сжатия и угловой перехватчик тип контентакак

application/json

enter image description here

ниже указан мой атрибут сжатия

   [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"))));
    }
}

}

Любая помощь?

Спасибо заранее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...