var doc = XDocument.Load("https://www.predictit.org/api/marketdata/all");
因例外而失败:
未处理的类型' System.Net.WebException'发生在System.dll
中其他信息:底层连接已关闭:发送时发生意外错误。
即使您可以通过Chrome访问https://www.predictit.org/api/marketdata/all。
api页面:https://predictit.freshdesk.com/support/solutions/articles/12000001878-does-predictit-make-market-data-available-via-an-api- 提到在请求标题中附加文本,可能是一个线索?
"要更改上述任何一种的返回类型,请在请求标头中添加以下内容之一。
接受:application / xml
接受:application / json"
我检查了防火墙,两个网络都允许使用visual studio。
答案 0 :(得分:2)
对于该特定错误,它是由TLS握手错误引起的。您可以通过在代码中的某处添加适当的TLS协议来修复它:
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls
| System.Net.SecurityProtocolType.Tls11
| System.Net.SecurityProtocolType.Tls12;
一旦你排序了,你就会遇到响应的其他问题。您必须在请求上设置接受标头。如果您尝试在没有标题的情况下下载,则默认情况下将返回JSON。浏览器将XML作为标题之一包含在内,这就是您查看XML的原因。
使用基本XDocument.Load()
重载无法做到这一点。您必须以字符串形式单独下载内容,或者至少获取具有正确标题的流并使用正确的重载。
XDocument GetSecureXDocument(string url)
{
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
var client = new WebClient
{
Headers = { [HttpRequestHeader.Accept] = "application/xml" }
};
using (var stream = client.OpenRead(url))
return XDocument.Load(stream);
}