底层连接已关闭:发送时出现意外错误."WebClient错误.OpenRead(字符串链接)

本文关键字:错误 quot WebClient OpenRead 链接 字符串 意外 连接 | 更新日期: 2023-09-27 17:53:34

我在获取google API返回数据时遇到错误"底层连接已关闭:发送时发生意外错误"
它在本地很好,但我已经发布并上传到服务器,我遇到了这个错误。请帮帮我……最好把…

 WebClient webClient = new WebClient();
 Stream stream = webClient.OpenRead("https://www.googleapis.com/oauth2/v1/userinfo?access_token=[Access_Token]);
 string b;
/*I have not used any JSON parser because I do not want to use any extra dll/3rd party dll*/
 using (StreamReader br = new StreamReader(stream))
      {
         b = br.ReadToEnd();
      }

底层连接已关闭:发送时出现意外错误."WebClient错误.OpenRead(字符串链接)

您的连接连接到HTTPS端点,它可能需要TLS 1.2,这可能不是您的客户端的默认TLS版本;这是一个修复旧版本的。net:

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

当客户端计算机无法发送HTTP请求时,会发生此问题。客户端计算机无法发送HTTP请求,因为连接已关闭或不可用。当客户端计算机发送大量数据时,可能会出现此问题。

访问https://support.microsoft.com/en-us/kb/915599

参见分辨率A、D、E、F和O可能对您有所帮助。

更新1:

很遗憾,上面的链接已经断开。

要在。net Framework 4.0中适应TLS1.2,请尝试:

ServicePointManager.SecurityProtocol = DirectCast(3072, SecurityProtocolType)

如果TLS 1.2不适合您,请尝试以下操作:

System.Net.ServicePointManager.SecurityProtocol =
    SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

下面是一些关于TLS和。net支持的信息:

  1. 。NET 4.6及以上版本。您不需要做任何额外的工作来支持TLS 1.2,默认支持。

  2. 。NET 4.5。 TLS 1.2是受支持的,但它不是默认协议。你需要选择加入使用它。下面的代码将使TLS 1.2成为默认值,请确保执行在连接到受保护的资源之前:ServicePointManager。SecurityProtocol =安全协议类型。Tls12

  3. 。NET 4.0。 TLS 1.2是不支持的,但是如果你的系统上安装了。net 4.5(或更高版本),那么你仍然可以选择TLS 1.2您的应用程序框架不支持它。唯一的问题是.NET 4.0中的安全协议类型没有相应的条目TLS1.2,所以我们必须使用这个枚举的数字表示形式值:ServicePointManager。SecurityProtocol =(SecurityProtocolType)

    3072;
  4. 。NET 3.5或以下版本。 TLS 1.2不支持(*),没有解决方法。将应用程序升级到最新版本的框架。

有关TLS和。net支持的更多信息,请访问以下链接:

TLS 1.2和。net支持:如何避免连接错误