【发布时间】:2019-01-14 20:51:22
【问题描述】:
以下代码在完整的 .Net 框架控制台程序中运行没有任何错误。但是,在.Net core 2.1中运行时出现以下错误。
System.AggregateException H结果=0x80131500 Message=发生了一个或多个错误。 源=System.Private.CoreLib 堆栈跟踪: 在 System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification) 在 C:\source\repos\ConsoleApp1\Program.cs:line 38 中的 ConsoleApp1.Program.requestString(String url) 在 C:\source\repos\ConsoleApp1\Program.cs:line 13 中的 ConsoleApp1.Program.Main(String[] args) 内部异常1: HttpRequestException:无法建立 SSL 连接,请参阅内部异常。 内部异常 2: IOException:无法从传输连接中读取数据:现有连接被远程主机强行关闭。 内部异常 3: SocketException:一个现有的连接被远程主机强行关闭代码:
class Program
{
static void Main(string[] args)
{
var url = "https://google.com";
var (statusCode, html) = requestString(url);
Console.WriteLine("%d %s", statusCode, html);
}
static CookieContainer cc = new CookieContainer();
static HttpClientHandler handler = new HttpClientHandler { AllowAutoRedirect = false, CookieContainer = cc };
public static async Task<(int statusCode, string content)> requestStringAsync(string url)
{
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
// | SecurityProtocolType.Ssl3;
using (var request = new HttpRequestMessage { RequestUri = new Uri(url), Method = HttpMethod.Get })
using (var client = new HttpClient(handler))
{
var response = await client.SendAsync(request); // Error (actual line)
// response.EnsureSuccessStatusCode() |> ignore
var statusCode = (int)response.StatusCode;
var content = await response.Content.ReadAsStringAsync();
return (statusCode, content);
}
}
public static (int statusCode, string content) requestString(string url)
{
return requestStringAsync(url).Result;
}
}
【问题讨论】:
-
你试过
dotnet dev-certs https --trust吗?