首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于VB.net HTTPclient的POST方法

基于VB.net HTTPclient的POST方法
EN

Stack Overflow用户
提问于 2022-08-05 13:06:25
回答 3查看 850关注 0票数 0

你好,我正在尝试访问一个带有数据的with表单。然而,我的代码没有错误,但它不能工作。它应该使用电信运营商提供的Web向我发送一条短信。如能提供任何协助和建议,将不胜感激。

代码语言:javascript
运行
复制
 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

端级

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-08-05 13:13:14

您的代码中有一些问题。让我先从最重要的一个开始:

代码语言:javascript
运行
复制
Catch Ex As Exception
    Console.WriteLine()
End Try

这段代码意味着:如果发生错误,会丢弃有关错误的所有有用信息,这些信息可以帮助我找到导致的原因,然后将空行写到控制台,假装什么都没有发生。

别干那事。删除整个试捕获块,然后重新运行代码。如果您得到了一个例外:这很好,因为.NET现在正在告诉您代码有什么问题!如果您理解错误消息,请使用它来修复代码。如果您不理解它,可以在StackOverflow上自由地询问社区。

第二期:这一行

代码语言:javascript
运行
复制
Dim request = client.PostAsync(url, bytes)

启动异步web请求。你不等待结果,所以你不知道它是否成功。

您应该使用Await异步方法,但是如果您还不熟悉异步/等待模式,我将无法在单个StackOverflow答案中给出所有必要的背景信息。在您熟悉异步/等待之前,可以通过访问已返回的任务的Result属性来同步等待结果:

代码语言:javascript
运行
复制
Dim response = client.PostAsync(url, bytes).Result
response.EnsureSuccessStatusCode()

第三个问题:您的JSON -序列化已经是JSON的东西。如果您的数据已经是JSON,只需使用它作为有效负载,而不调用SerializeObject

票数 0
EN

Stack Overflow用户

发布于 2022-08-05 13:12:09

您的data2是一个字符串。当您使用JSON库序列化它时,它可能不在您的URL端点所期望的JSON结构中。创建一个类型,用数据填充它,并将它传递给您的JsonCoverter

票数 0
EN

Stack Overflow用户

发布于 2022-08-05 15:20:31

谢谢Heinzi,以下是基于您的概念的最后工作代码:

代码语言:javascript
运行
复制
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

端级

我现在可以接收短信:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73250283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档