Я новичок в Интернете.Не уверен, что проблема здесь.
У меня есть машина с IIS, использующая ASP NET Core REST API по https.Я могу подтвердить, что GET работает через Google Chrome на моем компьютере, выполнив команду
Я подтвердил POSTдействие работает с почтальоном (опять же игнорируя недействительный сертификат).Все хорошо, пока я не попробую написать клиентское приложение.
У меня есть следующий код.
var ip = Dns.GetHostAddresses("test-machine");
// ip contains the correct IP
using (var hc = new HttpClient())
{
hc.GetAsync(@"https://test-machine/api/Example").Wait();
}
Этот код не работает.Я получаю System.AggregateException: «произошла одна или несколько ошибок».с 4 исключениями, сложенными друг на друга.
- HttpRequestException: при отправке запроса произошла ошибка.
- WebException: базовое соединение было закрыто: при отправке произошла непредвиденная ошибка.
- IOException: Unableдля чтения данных из транспортного соединения: существующее соединение было принудительно закрыто удаленным хостом.
- SocketException: существующее соединение было принудительно закрыто удаленным хостом
Если я изменилкод для использования IP вместо:
using (var hc = new HttpClient())
{
hc.GetAsync(@"https://10.0.0.21/api/Example").Wait();
}
Тогда запрос работает , как ожидается Т.е. как и в Chrome, я получаю проблему с сертификатом:
AuthenticationException:Удаленный сертификат недействителен в соответствии с процедурой проверки.
Что я делаю не так?Dns явно в состоянии получить правильный IP, я видел это в IPAddress[]
, возвращаемом GetHostAddresses
.Почему HttpClient не разрешает IP-адрес или разрешает IP-адрес с другой проблемой?
Я пытался
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
и
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
, но это делаетнет разницы.Использование
ServicePointManager.ServerCertificateValidationCallback
также не работает, так как никогда не достигает точки обратного вызова.Это терпит неудачу до того.
Я подозреваю, что проблема в том, что, поскольку я не знаком с чем-то из этого, я где-то пропустил что-то важное.
Следует также отметить - это консольное приложение .net 4.5.2.,Я попытался перейти на 4.6.1, и это все еще не удается.