你好,我正在尝试访问一个带有数据的with表单。然而,我的代码没有错误,但它不能工作。它应该使用电信运营商提供的Web向我发送一条短信。如能提供任何协助和建议,将不胜感激。
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
端级
发布于 2022-08-05 13:13:14
您的代码中有一些问题。让我先从最重要的一个开始:
Catch Ex As Exception
Console.WriteLine()
End Try
这段代码意味着:如果发生错误,会丢弃有关错误的所有有用信息,这些信息可以帮助我找到导致的原因,然后将空行写到控制台,假装什么都没有发生。
别干那事。删除整个试捕获块,然后重新运行代码。如果您得到了一个例外:这很好,因为.NET现在正在告诉您代码有什么问题!如果您理解错误消息,请使用它来修复代码。如果您不理解它,可以在StackOverflow上自由地询问社区。
第二期:这一行
Dim request = client.PostAsync(url, bytes)
启动异步web请求。你不等待结果,所以你不知道它是否成功。
您应该使用Await
异步方法,但是如果您还不熟悉异步/等待模式,我将无法在单个StackOverflow答案中给出所有必要的背景信息。在您熟悉异步/等待之前,可以通过访问已返回的任务的Result
属性来同步等待结果:
Dim response = client.PostAsync(url, bytes).Result
response.EnsureSuccessStatusCode()
第三个问题:您的JSON -序列化已经是JSON的东西。如果您的数据已经是JSON,只需使用它作为有效负载,而不调用SerializeObject
。
发布于 2022-08-05 13:12:09
您的data2是一个字符串。当您使用JSON库序列化它时,它可能不在您的URL端点所期望的JSON结构中。创建一个类型,用数据填充它,并将它传递给您的JsonCoverter
发布于 2022-08-05 15:20:31
谢谢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
端级
我现在可以接收短信:)
https://stackoverflow.com/questions/73250283
复制相似问题