c# - net 5.0 无法确定帧大小或收到损坏的帧

标签 c# .net-5

我想试试net5.0,因为它在rc2中,我遇到了一个奇怪的问题。
我在 net5.0 中创建了一个默认的 WebApi。我没有碰任何东西,我只是点击了运行(在 kestrel 中,而不是 ISS),然后 Swagger 主页就会出现。我尝试了 WeatherForcast get,一切正常。
Swagger index page
然后我在 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 控制台上收到错误消息。
  • 最佳答案

    Kestrel 用于强制选择 Tls 1.1 或 Tls 1.2。从 .Net 5.0 Preview 6 开始,它更改为“None”,即操作系统默认值。 Kestrel Default Tls Support
    巧合的是,微软去年开始在 Windows 10 中默认启用 Tls 1.3。Windows 10 Tls 1.3 Enabled by Default因此,您的应用程序现在很可能使用 Tls 1.3,我发现它有时是“有问题的”。
    要将 Tls 1.3 设置为默认禁用(意味着可用于请求它的应用程序,否则关闭),请在您的注册表中转到或创建此路径:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Client
    
    并设置或创建一个名为 DisabledByDefault 的 DWORD至 1 .
    这应该使您的浏览器使用 Tls 1.2。
    对于您的 Kestrel 服务器,类似地:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server
    
    在那里,设置或创建一个名为 DisabledByDefault 的 DWORD至 1 .
    如果不这样做,则在客户端和服务器下还创建一个名为“已启用”的 DWORD 设置为 0。这将完全禁用 Tls 1.3。

    关于c# - net 5.0 无法确定帧大小或收到损坏的帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64610237/

    相关文章:

    c# - MySql Entity Framework 选择

    asp.net-core - OData,Net5 : How to implement $count when controllers return entities of multiple types

    c# - #在 C# 中定义编译器指令

    C# - 如何使两个窗体互相引用

    swagger-ui - .NET-5 向未经授权的用户隐藏招摇的端点

    c# - .Net 5.0 中对 WPF 的响应式扩展支持

    c# - 尝试激活 'Serilog.AspNetCore.RequestLoggingMiddleware' 时无法解析“Serilog.Extensions.Hosting.DiagnosticContext”的服务

    c# - 如何使用 System.Text.Json 访问从字符串反序列化的动态对象的属性?

    c# - 带前导空格的确切字符数

    c# - 将 COM 接口(interface)传回库的正确方法是什么?