对于WhosOff无效的c#API请求

时间:2018-05-22 14:12:09

标签: c# json api

我正在尝试通过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 - 有人能指出我正确的方向吗?

1 个答案:

答案 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;