簡體   English   中英

發送JSON內容類型的POST請求並在VB.NET中顯示JSON響應

[英]Send a POST request of JSON content-type and display JSON response in VB.NET

我正在嘗試將POST請求發送到shapeshift,該請求幾乎沒有要作為JSON發送的參數,然后希望在VB.NET中顯示部分響應

shapeshift的文檔: https : //info.shapeshift.io/api#api-9

以下是我到目前為止嘗試過的方法:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    Dim request As HttpWebRequest
    Dim response As HttpWebResponse
    Dim reader As StreamReader
    Dim rawresponse As String

    Try

        request = DirectCast(WebRequest.Create("https://shapeshift.io/sendamount"), HttpWebRequest)
        request.ContentType = "application/json"
        request.Method = "POST"

        Dim postdata As String = "{""amount"":}" + TextBox1.Text + "{,""withdrawal"":}" + TextBox2.Text + "{,""pair"":""btc_eth""}" + "{,""returnAddress"":}" + TextBox3.Text
        request.ContentLength = postdata.Length

        Dim requestWriter As StreamWriter = New StreamWriter(request.GetRequestStream())
        requestWriter.Write(postdata)
        requestWriter.Close()

        response = DirectCast(request.GetResponse(), HttpWebResponse)
        reader = New StreamReader(response.GetResponseStream())


        rawresponse = reader.ReadToEnd()

   Catch ex As Exception
        Console.WriteLine(ex.ToString)
   End Try

   Dim json As String = rawresponse
   Dim jsonObject As Newtonsoft.Json.Linq.JObject = Newtonsoft.Json.Linq.JObject.Parse(json)

   Label1.Text = jsonObject("expiration").ToString

End Sub

我得到的錯誤是:400錯誤的請求

我認為是因為我弄亂了解釋JSON POST請求的代碼中的某些內容。 我做了很多研究,嘗試了幾件事,但沒有任何效果:(

嘗試以下方法:

Dim postdata As String = "{""amount"":" + TextBox1.Text + "},{""withdrawal"":""" + TextBox2.Text + """},{""pair"":""btc_eth""},{""returnAddress"":""" + TextBox3.Text + """}"

您的數據格式不正確。

或者這是String.Format的另一個版本:

Dim postdata2 As String = String.Format("{{""amount"":{0}}},{{""withdrawal"":""{1}""}},{{""pair"":""btc_eth""}},{{""returnAddress"":""{2}""}}", TextBox1.Text, TextBox2.Text, TextBox3.Text)

WebRequest現在已經很老了。 您可能要使用較新的System.Net.Http.HttpClient, 此處是官方文檔。

另外,在轉換為Json時,我強烈建議使用帶有通用參數(Of ...)的Newtonsoft.Json nuget包的JConvert / Deserialize功能轉換為預定義的對象。 在返回時節省大量手動文本解析。

舉了一個簡單的例子:

Private async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    Dim transaction As New MyRequestData With 
    {
        .Amount = Convert.ToDecimal(TextBox1.Text),
        .Withdrawal = Convert.ToDecimal(TextBox2.Text),
        .ReturnAddress  = TextBox3.Text
    }

    Dim content = newtonsoft.Json.JsonConvert.SerializeObject(transaction)
    dim buffer = System.Text.Encoding.UTF8.GetBytes(content)
    Dim bytes = new Net.Http.ByteArrayContent(buffer)
    bytes.Headers.ContentType = new Net.Http.Headers.MediaTypeHeaderValue("application/json")

    Dim responseBody As string = nothing
    Using client As New System.Net.Http.HttpClient
        Dim response = Await client.PostAsync("https://shapeshift.io/sendamount",bytes)
        responsebody = Await response.Content.ReadAsStringAsync()
    End Using

    Dim data = Newtonsoft.Json.JsonConvert.DeserializeObject(Of MyResponseData)(responsebody)

    If data.Expiration Is Nothing
        Label1.Text = data.Error
    Else
        Label1.Text = data.Expiration
    End If
End Sub

Public class MyRequestData
    Public property Amount As Decimal
    Public property Withdrawal As Decimal
    Public property Pair As String = "btc_eth"
    Public property ReturnAddress As String
End Class

Public class MyResponseData
    Public property Expiration As String
    Public property [Error] As String
End Class

希望這有幫助,祝你好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM