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

VB.NET使用HttpClient调用运营商短信Web API无报错但失效求助

问题分析与修复建议

代码中的核心问题

  • JSON语法错误:手动拼接的data2字符串里,多个属性的引号转义错误(比如msisdn:\"some number\"应为msisdn\":\"some number\"),导致JSON格式完全无效,API无法解析。
  • 重复序列化JSON:data2本身已是JSON字符串,却再次调用JsonConvert.SerializeObject,最终发送给API的是被二次转义的字符串,而非预期的JSON对象。
  • 异步方法未等待:PostAsync是异步方法,直接调用不使用Await会导致请求未完成就终止,实际未真正发送请求。
  • 异常处理无效:Catch块仅执行空的Console.WriteLine(),无法捕获和输出错误信息,排查无据。
  • HttpClient未复用:每次点击新建HttpClient实例,会造成系统socket资源耗尽,不符合最佳实践。

修正后的代码

' 在类级别声明复用的HttpClient实例
Private Shared ReadOnly _httpClient As New HttpClient()

Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Try
        Dim url = "some url" ' 替换为运营商提供的实际API地址
        
        ' 用匿名类构造请求数据,避免手动拼接JSON的语法错误
        Dim requestData = New With {
            .username = "someuname",
            .password = "somepass",
            .msisdn = "some number",
            .content = "Hello, this is a sample broadcast",
            .shortcode_mask = "somemask"
        }
        
        ' 将匿名类序列化为标准JSON字符串
        Dim payload = Newtonsoft.Json.JsonConvert.SerializeObject(requestData)
        Dim buffer = Encoding.UTF8.GetBytes(payload)
        Dim content = New Net.Http.ByteArrayContent(buffer)
        content.Headers.ContentType = New Net.Http.Headers.MediaTypeHeaderValue("application/json")
        
        ' 等待异步请求完成,确保请求正常发送
        Dim response = Await _httpClient.PostAsync(url, content)
        
        ' 验证响应状态,主动抛出HTTP错误便于排查
        response.EnsureSuccessStatusCode()
        Dim responseContent = Await response.Content.ReadAsStringAsync()
        Console.WriteLine("API响应内容:" & responseContent)
        
    Catch ex As Exception
        ' 输出完整异常信息,包含错误栈便于定位问题
        Console.WriteLine("错误详情:" & ex.ToString())
    End Try
End Sub

额外排查建议

  • 确认url、msisdn、shortcode_mask等参数完全符合运营商API的格式要求(比如号码是否需带国家码)。
  • 先用Postman等工具直接调用API,验证参数和地址的有效性,排除API本身或权限配置问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 10:18:39