我正在尝试通过C#和WinForms连接到API,从服务器下载一些数据。我正在使用最新版本的visual studio(撰写本文时为2017年)。
我正在使用的API: https://www.whosoff.com/features/api/
根据API设置,我已经获得了身份验证密钥,并且我的IP已列入白名单。
到目前为止我有什么:
try{
var request =(HttpWebRequest)WebRequest.Create("https://wr1.whosoff.com/api/whosoff?start_date=01-Apr-2018&end_date=25-Apr-2018");
request.Method = "GET";
request.Headers.Add("AUTH-KEY", "MY_AUTH_KEY");
var response = (HttpWebResponse)request.GetResponse();
string content = string.Empty;
using (var stream = response.GetResponseStream())
{
using (var sr = new StreamReader(stream))
{
content = sr.ReadToEnd();
}
}
}
} catch(Exception ex){
MessageBox.Show(ex.Message.ToString());
}
这不起作用 - 它抛出异常; “底层连接已关闭:发送时发生意外错误。”
我可以使用这种格式连接到其他网站API - 有人能指出我正确的方向吗?
答案 0 :(得分:1)
<强>更新强>
事实证明,问题在于TLS证书以及API服务需要TLS 1.2这一事实,默认情况下它是关闭的。可以通过将以下代码插入项目
来启用它ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
插入此代码后,一切都按预期工作。
原始帖子
对任何有兴趣的人; DID上面的代码实际上是可行的。事实证明,Visual Studio中的调试模式会导致这种奇怪的行为 - 我不确定的方式和原因。
但是直接从debug文件夹运行EXE文件时;它运作良好。
怪异。无论如何,我最终改为Newtonsoft.JSON并使用以下代码;
var client = new RestSharp.RestClient("API URL");
/* Create a new request to send to the client */
var request = new RestSharp.RestRequest(RestSharp.Method.GET);
/* Add the correct headers for authentication and format */
request.AddHeader("AUTH-KEY", "MY KEY");
request.AddHeader("Content-Type", "application/json; charset=utf-8");
/* Get the response */
var response = client.Execute(request);
var content = response.Content;