C # HttpClient Запрос об ошибке исключения HTTPS - PullRequest
0 голосов
/ 27 июня 2019

Я получаю периодически возникающую ошибку в веб-приложении MVC на .NET Core 2.2, которое отправляет запросы Http для получения информации от различных API.

Я полагаю, что ошибка связана с тем, что вместо URI используется httpshttp, так как другие вызовы других API без https работают абсолютно нормально.Даже когда клиентский обработчик определяет параметры сертификата и протокола, я все равно время от времени получаю эту ошибку исключения:

Ошибка при отправке запроса.

в System.Net.Http.HttpConnection.SendAsyncCore (HttpRequestMessage запрос, CancellationToken CancellationToken) при System.Net.Http.HttpConnectionPool.SendWithNtConnectionAuthAsync (HttpConnection соединение, HttpRequestMessage запрос, булева doRequestAuth, CancellationToken CancellationToken) при System.Net.Http.HttpConnectionPool.SendWithRetryAsync (HttpRequestMessage запрос, булеваdoRequestAuth, CancellationToken cancellationToken) в System.Net.Http.RedirectHandler.SendAsync (запрос HttpRequestMessage, CancellationToken cancellationToken) в System.Net.Http.DiagnosticsHandler.SendAsync.TendThttpHextHenTecenHenTecenHenTecenHenSecenTenGenTecenHenSecenSecenTenSecenSecenMenSecenTenSecenTenSecenMessage.SecenTenSenTenSenTen).Задача 1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts) at tf.PriceService.Core.Classes.WilliamHillMatching.GetHorsesFromEvent(String eventid) in C:\agent\_work\9\s\src\tf.PriceService.Core\Classes\WilliamHillMatching.cs:line 316 at tf.PriceService.Core.Classes.WilliamHillMatching.getPrices(List 1 whCopetitions, Race tfRaceData) в C: \ agent_work \ 9 \ s \ src \ tf.PriceService.Core \ Classes \ WilliamHillMatching.cs: строка 94 на tf.PriceService.Core.Services.PriceService. <> c__DisplayClass50_0.d.MoveNext () в C: \ agent_work \ 9 \ s \ src \ tf.PriceService.Core \ Services \ PriceService.cs: строка 173 --- Конец трассировки стека из предыдущего местоположения, где было сгенерировано исключение --- в tf.PriceService.Core.Services.PriceService.getBookmakerRacePrices (DateTime workDate, List`1 tfPriceList, Race tfRaceData) в C: \ agent_work \ 9 \ s \ src \ tf.PriceService.Core \ Services \ PriceService.f:.PriceService.Core.Services.PriceService.processRacePrices (состояние объекта) в C: \ agent_work \ 9 \ s \ src \ tf.PriceService.Core \ Services \ PriceService.cs: строка 341

Здесьэто код:

    public static async Task<WilliamHillData.Market> GetHorsesFromEvent(string eventid)
    {
        string res = "";

        using (HttpClientHandler handler = new HttpClientHandler())
        {
            handler.ServerCertificateCustomValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;
            handler.SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls11 | SslProtocols.Tls;

            using (HttpClient client = new HttpClient(handler))
            {
                client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json");
                client.DefaultRequestHeaders.TryAddWithoutValidation("apiKey", "key");

                using (HttpResponseMessage response = await client.GetAsync("https://gw.whapi.com/v2/sportsdata/events/" + eventid + "/?&includeAllDescendants=true"))
                {
                    res = await response.Content.ReadAsStringAsync();
                }
            }
        }

        JObject jobject = JObject.Parse(res);
        List<WilliamHillData.Market> list = jobject["markets"].ToObject<List<WilliamHillData.Market>>().ToList();
        list[0].eventid = eventid;

        return list[0];
    }

Кажется, это указывает на эту конкретную часть:

 using (HttpResponseMessage response = await client.GetAsync("https://gw.whapi.com/v2/sportsdata/events/" + eventid + "/?&includeAllDescendants=true"))
                {
                    res = await response.Content.ReadAsStringAsync();
                }

Я что-то упустил из моего запроса Http?Есть ли альтернативный способ?

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