一般来说,我是Web知识的新手。不知道这里是什么问题。
我有一台带有IIS的机器,该机器在https上运行ASP NET Core REST API。 通过执行以下任一操作,我可以确认GET是否可以通过我的计算机上的Google Chrome正常工作
我确认使用Postman可以执行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个例外相互叠加。
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,但这仍然失败。
答案 0 :(得分:0)
我完全看错地方了。问题出在IIS安装程序上。
由于某些原因,站点绑定已明确设置为10.0.0.21:433。将其切换为“所有未分配”-似乎已经完成了这项工作。
我可能超出了我的理解范围,可能是错误的,但是我怀疑这是因为Wireshark认为,对MDNS请求以查找主机名IP的响应正在返回 ipv6 服务器计算机的“ strong>地址”,当然不是10.0.0.21。再说一次,我可能是错的。
我不确定的原因是,当我放入https://test-machine/api/Example时,chrome似乎已经完全犁开并找到了正确的东西,而我无法解释原因。