【发布时间】:2021-02-13 00:36:57
【问题描述】:
我想试试net5.0,因为它在rc2,我遇到了一个奇怪的问题。
我在 net5.0 中创建了一个默认的 WebApi。我没有碰任何东西,我只是点击了运行(在 kestrel 中,而不是 ISS 中),然后 Swagger 主页出现了。我尝试了 WeatherForcast get,一切正常。
然后我在 NET5.0 中创建了一个控制台应用程序并添加了以下代码:
static async Task Main(string[] args)
{
var clientHandler = new HttpClientHandler
{
ServerCertificateCustomValidationCallback = (_, _, _, _) => true
};
var client = new HttpClient(clientHandler);
try
{
var httpMessage = await client.GetAsync("https://localhost:5001/WeatherForecast");
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
使用此代码,我收到以下错误:
System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception.
---> System.IO.IOException: Cannot determine the frame size or a corrupted frame was received.
在那之后,我在 Postman 上尝试了相同的请求并且它成功了(来自 swagger)。 我的最终测试是将控制台应用程序切换到 netcore 3.1 并且请求有效。
所以我只在 net5.0 应用程序上遇到了这个错误。
有什么建议吗?
编辑:
- 这是我的电脑信息:W10 Enterprise,V 1809,Build 17763.1518。
- 我只在 Net5.0 控制台上得到了错误。
【问题讨论】:
-
你的问题标题与它的内容有什么关系?
-
请不要使用
.GetAwaiter().GetResult()。异步代码是异步的,不要试图强制它同步运行。 -
你是说从 .NET 5 控制台应用程序调用 Web API 方法
https://localhost:5001/WeatherForecastonly 失败,并从 .NET Core 3.1/Swagger 成功调用/邮递员? -
我的猜测是您正在点击github.com/dotnet/runtime/issues/1720 - 标记为已解决,并使用合并的代码进行修复,但不知道该修复是否已进入 RC2。如果您指定您正在使用的操作系统和版本,这也会有所帮助。
-
我最好的猜测是您正在运行没有 TLS 的服务器,但正在尝试使用 https 进行连接。删除http。是的,正如上面@IanKemp 所说,请正确学习异步编程和线程。