簡體   English   中英

VB.net 使用 HTTPclient 的 POST 方法

[英]VB.net POST method using HTTPclient

您好我正在嘗試使用數據訪問網絡表單。 但是我的代碼沒有錯誤,但它不起作用。 它應該使用電信運營商提供的 Web API 向我發送短信。 任何幫助和建議將不勝感激。

 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Try
        Dim client As New HttpClient
        Dim url = $"some url"
        Dim data2 = "{""username"": ""someuname"", ""password"":""somepass"", ""msisdn:""some number"", ""content:""Hello, this is a sample broadcast"", ""shortcode_mask:""somemask""}"
        
        Dim payload = Newtonsoft.Json.JsonConvert.SerializeObject(data2)
        Dim buffer = Encoding.UTF8.GetBytes(payload)
        Dim bytes = New Net.Http.ByteArrayContent(buffer)
        bytes.Headers.ContentType = New Net.Http.Headers.MediaTypeHeaderValue("application/json")
       
        Dim request = client.PostAsync(url, bytes)

    Catch Ex As Exception
        Console.WriteLine()
    End Try

End Sub

結束 Class

您的 data2 是一個字符串。 當您使用 JSON 庫對其進行序列化時,它可能不在您的 URL 端點所期望的 JSON 結構中。 創建一個類型,用數據填充它,然后將其傳遞給您的 JsonCoverter

您的代碼中有一些問題。 讓我先從最重要的一個開始:

Catch Ex As Exception
    Console.WriteLine()
End Try

這段代碼的意思是:如果發生錯誤,扔掉所有可以幫助我找到原因的錯誤信息,然后在控制台寫一個空行,假裝沒有發生任何不好的事情。

不要那樣做。 刪除整個 try-catch 塊,然后再次重新運行您的代碼。 如果您遇到異常:那太好了,因為 .NET 現在會告訴您代碼有什么問題,如果您理解錯誤消息。 用它來修復你的代碼,如果你不明白的話。 隨時在 StackOverflow 上向社區提問。


第二期:這條線

Dim request = client.PostAsync(url, bytes)

啟動異步web 請求。 你不等待結果,所以你不知道它是否成功。

您應該Await異步方法,但如果您還不熟悉異步/等待模式,我將無法在單個 StackOverflow 答案中為您提供所有必要的背景知識。 在您熟悉 async/await 之前,您可以通過訪問已返回的 Task 的Result屬性來同步等待結果:

Dim response = client.PostAsync(url, bytes).Result
response.EnsureSuccessStatusCode()

第三個問題:你對已經是 JSON 的東西進行 JSON 序列化。 如果您的數據已經是 JSON,只需將其用作有效負載而不調用SerializeObject

謝謝Heinzi,這是基於您的概念的最終工作代碼:

Public Class Form1


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

    Dim client As New HttpClient
    Dim url = $"some url"
    Dim data2 = "
    {""username"": ""some uname"", ""password"": ""somepass"", ""msisdn"": ""somenumber"", ""content"": ""Hello, this is a sample broadcast"", ""shortcode_mask"" :""somemask""}"

    Dim buffer = Encoding.UTF8.GetBytes(data2)
    Dim bytes = New ByteArrayContent(buffer)
    bytes.Headers.ContentType = New Headers.MediaTypeHeaderValue("application/json")


    Dim request1 = Await client.PostAsync(url, bytes)
    Dim response = client.PostAsync(url, bytes).Result
    response.EnsureSuccessStatusCode()


End Sub

結束 Class

我現在可以接收短信了:)

暫無
暫無

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

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