等一下。在将此标记为重复之前。我的问题略有不同。 所以我正在调用一个抛出此异常的api。但是 - 问题是只有在从服务器进行调用时才会发生这种情况。如果我进行角度/ ajax调用 - 这完全正常。 当我写下以下内容时.net中的内容
using (HttpClient hc = new HttpClient())
{
hc.BaseAddress = new Uri(endpoint);
hc.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = hc.GetAsync(url).Result;
}
我得到内部异常说 无法建立连接,因为目标计算机主动拒绝了它xx.xxx.xx.xx:pp
我检查了所有链接Here和here。他们都在讨论防火墙/网络问题。我不觉得这是防火墙或网络,因为它通过ajax工作。 我正在考虑更多与服务器配置有关的事情。任何指针都会有所帮助。
此外 - 当我从浏览器或通过提琴手拨打电话时,此功能正常。
答案 0 :(得分:1)
如果您正在从同一台计算机上执行相同的API调用,而另一种方法正在运行,而另一种方法不起作用,那么您可能无法发送服务器所需的内容。
当您使用AJAX调用时,如果您希望API响应,您的浏览器会附加许多您需要复制的辅助信息。例如,cookie和用户代理字符串。服务器检测到您不浏览器,并拒绝您的请求。这有很多正当理由,例如尝试停止自动机器人来点击他们的API。
您可以使用开发人员工具查看浏览器发送的内容。例如,在Chrome中,您可以查看网络请求标头,如下所示:
或者,它可能仍然是您的防火墙限制您的应用程序并允许您的浏览器通过。尝试明确为您的应用程序添加规则。
答案 1 :(得分:0)
所以我终于想出了原因 - 但我不确定为什么会这样。
原因是因为 - Visual studio不尊重我们的代理设置。 基本上 - 我们在这里谈论3台服务器
所以我的机器ip:xxx.xx.xx.1
我们的公司代理服务器ip:xx.xx.xx.2
api ip:xxx.xx.xx.3 url(api.com)
每次通话都通过我的代理进行路由,我可以在互联网设置中查看。所以当我安装wireshark并看到路线时 - >当我从visual studio访问时,它直接尝试从我的主机访问api服务器,而无需通过代理。
即:xxx.xx.xx.1 - > xxx.xx.xx.3 [失败]
当我从浏览器尝试时 - 它尊重代理设置
即:xxx.xx.xx.1 - > xxx.xx.xx.2
[成功] xxx.xx.xx.2 - > xxx.xx.xx.3 [成功]
修复是 - 当我添加主持人条目
时事情开始起作用 - 因为所有对api的调用现在都通过代理服务器进行路由。 我不知道为什么会这样或者如何避免这种情况。至少解决了我的问题。xxx.xx.xx.2 - api.com
我检查了设置 - 我的web.config / machine.config中没有任何内容。