HttpClient Gzip Сжатие - PullRequest
1 голос
/ 25 июня 2019

У меня работает следующий код, который вызывает API, распаковывает ответ и затем преобразует его в объект:

 public static async Task<List<marketData>> GetAllEvents()
    {
        string res = "";

        HttpClientHandler handler = new HttpClientHandler();
        handler.AutomaticDecompression = System.Net.DecompressionMethods.Deflate | System.Net.DecompressionMethods.GZip;

        using (HttpClient client = new HttpClient(handler))
        {
            client.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Encoding", "gzip, deflate");

            using (HttpResponseMessage response = await client.GetAsync("http://services.betvictor.com/omds/events/query/sport/200/markettypes/6/periods/-1.json?ep=true&e=true"))
            {                    
                Stream dataStream = await response.Content.ReadAsStreamAsync();

                using (StreamReader reader = new StreamReader(dataStream, Encoding.UTF8))
                {
                    res = await reader.ReadToEndAsync();
                }

                dataStream.Close();
                dataStream.Dispose();                 
            }
        }

        handler.Dispose();

        getEvents.Rootobject rawdata = JsonConvert.DeserializeObject<getEvents.Rootobject>(res);
        return sortMarketsAndRaces(rawdata);
    }

Это все работает абсолютно нормально при запуске на localhost, но при развертывании с использованием AzureСервер Я получаю сообщение об ошибке:

"Архивная запись была сжата с использованием неподдерживаемого метода сжатия."

Stacktrace:

в системе.IO.Compression.Inflater.Inflate (FlushCode flushCode) в System.IO.Compression.Inflater.ReadInflateOutput (Byte * bufPtr, длина Int32, FlushCode flushCode, Int32 & bytesRead) в System.IO.Compression.Inflater.InflateVert ()., Длина Int32) в System.IO.Compression.DeflateStream.FinishReadAsyncMemory (буфер ValueTask 1 readTask, Memory 1, CancellationToken cancellationToken) в System.IO.StreamReader.ReadBufferAsync () в System.IO.StreamReader.ReadToEndAsynerfP.Core.Classes.BetVictorMatching.GetAllEvents () в C: \ Data \ tf-price-service \ src \ tf.PriceService.Core \ Classes \ BetVictorMatching.cs: строка 228 в tf.PriceService.Core.Services.PriceService. <> c.d.MoveNext () в C: \ Data \ tf-price-service \ src \ tf.PriceService.Core \ Services \ PriceService.cs: строка 253 --- Конец трассировки стека из предыдущего расположения, где было сгенерировано исключение ---в tf.PriceService.Core.Services.PriceService.getAllBookmakerMeetingsAndRaces (DateTime date) в C: \ Data \ tf-price-service \ src \ tf.PriceService.Core \ Services \ PriceService.cs: строка 255 в tf.Price.Services.PriceService.processRacePrices (состояние объекта) в C: \ Data \ tf-price-service \ src \ tf.PriceService.Core \ Services \ PriceService.cs: строка 308

1 Ответ

0 голосов
/ 26 июня 2019

Проблема заключалась в том, что IP-адрес сервера Azure отсутствовал в белом списке API, поэтому в ответе возвращалась запрещенная ошибка 403.

...