HttpClient не может установить связь с конечной точкой HTTP - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть требование получать данные от конечной точки API из моего контроллера WebAPI.Я использую HttpClient для достижения цели.Однако кажется, что клиент не может получить данные с конечной точки.Вызов connect завершается неудачно со следующей ошибкой:

 HTTPS handshake to test.site failed. System.IO.IOException Unable to read  
 data from the transport connection: An existing connection was forcibly  
 closed by the remote host. <An existing connection was forcibly closed by 
 the remote host>

Конечная точка API правильно размещена с действительным сертификатом SSL.Более того, если я использую консольное приложение / использую почтальон для попадания в API, ошибки не возникает, и я вижу ответ.Тем не менее, когда я пытаюсь использовать тот же самый API изнутри моего контроллера API, я вижу ошибку соединения SSL.

Вот код для клиента:

HttpClient client = new HttpClient()
        {
            BaseAddress = new Uri(uri)
        };

var requestMessage = new HttpRequestMessage(                                
                         new HttpMethod("GET"),
                         requestUrl);

ServicePointManager.ServerCertificateValidationCallback += 
                                (sender, certificate, chain, sslPolicyErrors) => true;

client.DefaultRequestHeaders.Add(
                "User-Agent",
                "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36");
client.DefaultRequestHeaders.Accept.Add(
            new MediaTypeWithQualityHeaderValue("application/json"));

var responseMessage = await client.SendAsync(requestMessage);

Почему поведение для запроса connect от WebAPI отличается от поведения консольного приложения?Можете ли вы помочь мне решить вышеуказанную проблему?

1 Ответ

0 голосов
/ 23 сентября 2018

В старых версиях .NET Framework по умолчанию используются более старые версии TLS, которые могут быть отклонены конечной точкой.Становится стандартным отклонение запроса с использованием менее TLS v1.2.

Чтобы обойти это, вы можете либо использовать более новую версию .NET Framework, либо вы можете явно указать, какую версию (версии)TLS ServicePointManager использует.

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