You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET WinForm调用带X-API-KEY的API时遇连接关闭错误求助

解决VB.NET调用API时连接关闭的问题

核心原因

你遇到的The underlying connection was closed: An unexpected error occurred on a send.错误,绝大多数情况是TLS版本不兼容。很多现代API仅支持TLS 1.2或更高版本,但旧版.NET Framework(如4.5及以下)默认未启用这些高版本协议,导致握手失败。

具体解决方案

1. 强制设置TLS版本(适配你现有代码)

在发起请求前添加TLS版本配置,修改后的代码如下:

WebRequest版本:

Const URL_LANG = "https://netservice-prod.apigee.net/upc/a2a/api/v7/languages"
Const KEY = "MyKey"  ' 实际代码中替换为真实密钥

Dim result As String
' 强制启用TLS 1.2和1.3
System.Net.ServicePointManager.SecurityProtocol = 
    System.Net.SecurityProtocolType.Tls12 Or System.Net.SecurityProtocolType.Tls13

Dim request = System.Net.WebRequest.Create(URL_LANG)
request.Headers.Add("X-API-KEY", KEY)
request.Method = "GET"
Try
    Using response = request.GetResponse()
        Using stream = response.GetResponseStream()
            Using reader = New System.IO.StreamReader(stream)
                result = reader.ReadToEnd()
            End Using
        End Using
    End Using
Catch ex As Exception
    ' 添加错误日志或提示,方便排查具体问题
    MessageBox.Show($"请求失败:{ex.Message}")
End Try

WebClient版本:

Const URL_LANG = "https://netservice-prod.apigee.net/upc/a2a/api/v7/languages"
Const KEY = "MyKey"  ' 实际代码中替换为真实密钥

Dim result As String
' 强制启用TLS 1.2和1.3
System.Net.ServicePointManager.SecurityProtocol = 
    System.Net.SecurityProtocolType.Tls12 Or System.Net.SecurityProtocolType.Tls13

Try
    Using client = New Net.WebClient()
        client.Headers.Add("X-API-KEY", KEY)
        result = client.DownloadString(URL_LANG)
    End Using
Catch ex As Exception
    MessageBox.Show($"请求失败:{ex.Message}")
End Try

2. 推荐使用HttpClient(更现代、可靠)

WebRequest和WebClient属于较旧的API,推荐使用HttpClient,它对现代协议支持更好,且支持异步操作,避免阻塞WinForms UI:

Const URL_LANG = "https://netservice-prod.apigee.net/upc/a2a/api/v7/languages"
Const KEY = "MyKey"  ' 实际代码中替换为真实密钥

' 建议全局复用HttpClient,不要每次请求都新建
Private Shared ReadOnly _httpClient As New HttpClient()

' 在窗体初始化时配置一次
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    ' 设置TLS版本
    System.Net.ServicePointManager.SecurityProtocol = 
        System.Net.SecurityProtocolType.Tls12 Or System.Net.SecurityProtocolType.Tls13
    ' 添加默认请求头
    _httpClient.DefaultRequestHeaders.Add("X-API-KEY", KEY)
End Sub

' 异步调用API
Private Async Sub btnGetLanguages_Click(sender As Object, e As EventArgs) Handles btnGetLanguages.Click
    Try
        Dim result = Await _httpClient.GetStringAsync(URL_LANG)
        ' 处理返回结果
        MessageBox.Show(result)
    Catch ex As Exception
        MessageBox.Show($"请求失败:{ex.Message}")
    End Try
End Sub

额外排查点

  • 检查.NET Framework版本:如果是4.5及以下,建议升级到4.6.1或更高版本(原生支持TLS 1.2)。
  • 验证API可用性:先用Postman或浏览器访问该URL,手动添加X-API-KEY请求头,确认能正常返回数据,排除密钥无效或API本身的问题。
  • 网络环境检查:确认开发环境没有被防火墙、企业代理拦截HTTPS请求。

内容的提问来源于stack exchange,提问作者C66

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 19:01:20