[英]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.