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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:52:39