我从cryptopia C#API示例中获取了此代码。我将其翻译为vb.net。代码有点混乱。我不知道屏幕后面发生了什么。
我添加了一些我认为会更明确的代码。但它们会产生不同的结果。
Dim requestUri As String = "https://www.cryptopia.co.nz/Api/GetBalance"
Dim postData = New With { _
Key .Currency = "DOT" _
}
' Create Request
Dim request = New HttpRequestMessage()
request.Method = HttpMethod.Post
request.RequestUri = New Uri(requestUri)
request.Content = New ObjectContent(GetType(Object), postData, New JsonMediaTypeFormatter()) 'I still don't get what the hell is this
Dim somebyte0 = Await request.Content.ReadAsByteArrayAsync()
Dim somebyte1 = exchanges.getBytes(request.Content.ToString)
Dim somestring = exchanges.getString(somebyte0) '
Dim sometring2 = exchanges.getString(somebyte1) '
首先,程序创建一个名为postData的匿名类类型
然后它创建了一个新的httprequestmessage。并为其内容分配一些价值。
我不知道httprequestmessage需要内容。我知道他们有URI。我知道他们有标题。我知道他们发布消息。到底是什么“内容”
在http请求中,我们通常有正确的文本。标题,uri,主持人,帖子消息都是正确的文本或字符串。
似乎内容是某种字符串。也许是一个编码postData的json字符串。
我想看看那些字符串。
我下载的代码使用
Dim somebyte0 = Await request.Content.ReadAsByteArrayAsync()
我对Await不太熟悉。我不需要任何异步。所以我想用同步的东西取而代之。
我做了
Dim somebyte1 = exchanges.getBytes(request.Content.ToString)
其中getbytes定义为
Public Shared Function getBytes(secret As String) As Byte()
Dim result = System.Text.Encoding.UTF8.GetBytes(secret) '
Return result
End Function
这是我用来计算密码签名的标准函数,我已经成功地将它们用于yobit和hitbtc API。
我得到了不同的字节 我把它们变成文本
Dim somestring = exchanges.getString(somebyte0) '7b2243757272656e6379223a22444f54227d
Dim sometring2 = exchanges.getString(somebyte1) '53797374656d2e4e65742e487474702e4f626a656374436f6e74656e74
我得到了
7b2243757272656e6379223a22444f54227d
我想知道到底发生了什么?
答案 0 :(得分:1)
将53797374656d2e4e65742e487474702e4f626a656374436f6e74656e74
转换为字符串,然后获得" System.Net.Http.ObjectContent"。这是因为您在ToString()
(即System.Net.Http.ObjectContent对象)上调用了request.Content
。转换7b2243757272656e6379223a22444f54227d
即可获得" {"货币":" DOT"}"。这是因为在这里您将http内容序列化为字节数组(通过ReadAsByteArrayAsync()
调用)。 ObjectContent
类没有任何同步方法,也没有任何属性(Headers
除外)。所以我担心你在这里使用async时会感到困惑。