我正在尝试连接到RESTful API,当我从浏览器访问URL时,我收到一条错误消息,指出我错过了标题,这是我期望得到的。当我使用下面的代码连接到同一个URL时,我收到错误声明"底层连接已关闭:发送时发生意外错误。 ---> System.IO.IOException:身份验证失败,因为远程方已关闭传输流"。如果我使用相同的代码并将URL更改为Google.com,那么它可以正常工作,并添加我从浏览器到API URL的连接将在API服务器上的Apache日志中生成一个条目,但是下面代码没有。有没有人有任何想法,为什么我会得到这个错误?
var httpWebRequest = (HttpWebRequest)WebRequest.Create("HTTPS://URL.COM");
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "GET";
string html = string.Empty;
try
{
HttpWebResponse response = (HttpWebResponse)httpWebRequest.GetResponse();
string responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
Response.Write(responseString);
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}
更新:我尝试使用HttpClient并得到了相同的结果:
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("https://url.com/");
// Add an Accept header for JSON format.
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = client.GetAsync("v1/person").Result;
if (response.IsSuccessStatusCode)
{
Response.Write(response);
}
else
{
Response.Write(response);
}
更新2:下面的代码行似乎解决了这个问题。我现在正在等待确认。我仍然有点困惑,为什么这是必需的。
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;