VB.Net 4.6中REST POST授权失败但PostMan可正常运行求助
问题分析与解决方案
你的代码核心问题出在请求体的XML格式构造错误,具体是换行符的处理方式不对:
你在StringContent中写入的&vbcrLF会被当作普通文本发送给服务端,而不是实际的换行符。服务端解析XML时会因为这些无效字符无法正确识别用户信息,导致返回NOT_AUTH错误。
修正后的代码
Sub Main() Test().Wait() ' 同步方法中等待异步任务完成 Console.WriteLine("finished") Console.ReadLine() End Sub Public Async Function Test() As Task Try System.Net.ServicePointManager.SecurityProtocol = Net.SecurityProtocolType.Tls12 Using client = New HttpClient() ' 用Using确保HttpClient资源正确释放 Dim request = New HttpRequestMessage(HttpMethod.Post, "https://example.com/common/api/authorize") request.Headers.Add("Authorization", "Basic abcdefREMOVED==") request.Headers.Add("Accept", "application/xml") ' 正确构造XML内容,使用vbCrLf生成实际换行符 Dim xmlContent = "<Request>" & vbCrLf & " <User>abc</User>" & vbCrLf & " <Password>abcREMOVED</Password>" & vbCrLf & " <Type>CUST</Type>" & vbCrLf & "</Request>" Dim content = New StringContent(xmlContent, System.Text.Encoding.UTF8, "application/xml") request.Content = content Dim response = Await client.SendAsync(request) response.EnsureSuccessStatusCode() Console.WriteLine(Await response.Content.ReadAsStringAsync()) End Using Catch ex As Exception Console.WriteLine(ex.Message) End Try End Function
额外检查点
- 确认
Authorization头的Basic认证字符串和PostMan中完全一致,避免复制时出现遗漏或多余字符。 - 对比PostMan的"Raw"标签下的XML文本,确保代码生成的XML结构、缩进完全匹配。
- 始终用
Using包裹HttpClient,避免连接资源泄漏引发的潜在问题。
内容的提问来源于stack exchange,提问作者Dec
相关产品推荐
相关产品推荐

