是否有更明确的方式来查看这些代码

时间:2017-10-09 12:49:34

标签: vb.net

我从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

我想知道到底发生了什么?

1 个答案:

答案 0 :(得分:1)

53797374656d2e4e65742e487474702e4f626a656374436f6e74656e74转换为字符串,然后获得" System.Net.Http.ObjectContent"。这是因为您在ToString()(即System.Net.Http.ObjectContent对象)上调用了request.Content。转换7b2243757272656e6379223a22444f54227d即可获得" {"货币":" DOT"}"。这是因为在这里您将http内容序列化为字节数组(通过ReadAsByteArrayAsync()调用)。 ObjectContent类没有任何同步方法,也没有任何属性(Headers除外)。所以我担心你在这里使用async时会感到困惑。