VB.NET发送原始JSON到PUT接口报502错误 Postman请求正常如何解决
问题原因与修复方案
以下是你代码中存在的问题和对应调整方案:
- Content-Type配置错误:发送JSON数据时需将
contentType设置为application/json,你当前传入的text/plain会导致服务端/网关无法正确识别请求格式,触发502错误。 - JSON格式不规范:你的
postdata字符串属于非法JSON格式,JSON的键和字符串类型的值必须用双引号包裹,Postman会自动修正此类格式问题,但.NET代码不会主动处理,直接发送会导致服务端解析失败。 - 请求头添加逻辑错误:原有代码添加
x-api-key时直接传入了键:值拼接字符串,WebRequest.Headers.Add需分别传入键名和键值两个参数,格式错误会导致API密钥校验不通过。 - HTTPS安全协议缺失:目标接口为HTTPS协议,若服务端要求TLS1.2及以上版本加密,旧版.NET框架默认不会启用高版本TLS,会导致握手失败触发网关错误。
- 资源释放逻辑不严谨:手动关闭流和响应对象的方式,在请求出现异常时容易出现资源泄漏,引发未预期的请求问题。
- JSON字段疑似笔误:第一个对象的键
barcod比第二个的barcode少了字母e,若接口要求字段名完全匹配也会导致请求失败。
调整后代码
公共请求方法
Private Function SendRequest(uri As Uri, jsonDataBytes As Byte(), contentType As String, method As String) As String ' 配置HTTPS安全协议,支持TLS1.2/1.3,可根据接口实际要求调整 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 Or SecurityProtocolType.Tls13 Dim req As WebRequest = WebRequest.Create(uri) req.ContentType = contentType req.Method = method req.ContentLength = jsonDataBytes.Length ' 修正请求头添加方式,分开传入键和值 req.Headers.Add("x-api-key", "xxxxxY0tZN55jbXnY05Oxxxxx") ' 使用Using自动释放流资源,避免异常场景下资源泄漏 Using stream = req.GetRequestStream() stream.Write(jsonDataBytes, 0, jsonDataBytes.Length) End Using Using response = req.GetResponse() Using responseStream = response.GetResponseStream() Using reader As New StreamReader(responseStream) Return reader.ReadToEnd() End Using End Using End Using End Function
调用代码
' 修正JSON格式,所有键和字符串值加双引号,同时修正字段名笔误 Dim postdata As String = "[{""barcode"":""A0000041""},{""barcode"":""A0000113""}]" Dim data = Encoding.UTF8.GetBytes(postdata) Dim Uri As New Uri("https://sample.com/xxxxx/xxxxx?funcName=UpdateBaarcode") ' 传入JSON对应的正确Content-Type Dim result_post = SendRequest(Uri, data, "application/json", "PUT")
排查建议
如果调整后仍报错,可捕获WebException类型的异常,读取异常对象的Response属性中的返回内容,即可拿到服务端返回的具体错误信息,快速定位剩余问题。
内容的提问来源于stack exchange,提问作者aravindb
相关产品推荐
相关产品推荐

