【问题标题】:API-Problem - POST Json-String with httpClient in VB.netAPI 问题 - 在 VB.net 中使用 httpClient POST Json-String
【发布时间】:2021-01-14 05:22:04
【问题描述】:

我想通过 httpClient 将 json 值发布到 API 中。不幸的是,我是一个初学者,无法处理它。 GET 完美运行: 这里是 GET 的代码:

    Dim request As HttpWebRequest
    Dim response As HttpWebResponse = Nothing
    Dim reader As StreamReader
    ' Wird für https-Requests benötigt
    System.Net.ServicePointManager.SecurityProtocol = DirectCast(3072, SecurityProtocolType)

    request = DirectCast(WebRequest.Create(url), HttpWebRequest)
    response = DirectCast(request.GetResponse(), HttpWebResponse)
    reader = New StreamReader(response.GetResponseStream())
    Dim s As String
    s = reader.ReadToEnd
    Return s

但是我如何实现 POST 呢? 我的 API-URL 如下所示: https://mydomaine.net/api/auth?token=467445892587458542..。 我将发送一个 JSON 字符串 {"test":"value1":"test1":"value2"} 我已经为这个问题工作了好几个小时。 有人可以帮忙吗???

【问题讨论】:

  • 设置request.ContentType = "application/json"request.Method = WebRequestMethods.Http.Post 并将 JSON 作为 UTF-8 字节写入请求流 (request.GetRequestStream())。此 API 是否有任何与发布数据相关的文档? -- 为什么要将 SecurityProtocolType 转换为 Tls12 Enum 值?您还在使用 4.5 之前的 .Net Framework 版本吗?是时候更新了。
  • 非常感谢您的帮助。我现在有一个可行的解决方案。

标签: vb.net dotnet-httpclient


【解决方案1】:

这是有效的代码

Public Function PostRequest(uri As Uri, jsonDataBytes As Byte(), contentType As String, method As String) As String
    Dim response As String
    Dim request As HttpWebRequest
    ServicePointManager.Expect100Continue = True
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12

    request = WebRequest.Create(uri)
    request.ContentLength = jsonDataBytes.Length
    request.ContentType = contentType
    request.Method = method

    Using requestStream = request.GetRequestStream
        requestStream.Write(jsonDataBytes, 0, jsonDataBytes.Length)
        requestStream.Close()

        Using responseStream = request.GetResponse.GetResponseStream
            Using reader As New StreamReader(responseStream)
                response = reader.ReadToEnd()
            End Using
        End Using
    End Using

    Return response
End Function

【讨论】:

  • ServicePointManager.Expect100Continue = false:您的代码未处理来自服务器的100Continue 响应。你还应该展示你是如何调用这个方法的。
猜你喜欢
  • 2018-09-14
  • 2018-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多