【问题标题】:How to wait for http request in VB.Net app?如何在 VB.Net 应用程序中等待 http 请求?
【发布时间】:2020-10-01 16:07:43
【问题描述】:

我必须在我的 VB.Net 应用程序中编写等待 http 请求的代码,并在请求到来时从中提取 JSON 字符串。

我知道如何处理 JSON 字符串

我知道如何编写并行线程来等待请求。

但我不知道如何捕捉请求

我找到了这个代码:How to wait for multiple async http request

但它是一个旧代码(微软现在说这个例子中使用的类 HttpWebResponse 和 HttpWebRequest 已被弃用),而且在 VB 中似乎很难翻译:有一个类似“foreach(var result in completedTasks.Select( t=>t.Result))" 和 "t" 没有在任何地方定义。

我找到了其他示例,但它们都告诉我们如何从 Vb.Net 发送 Http 请求,我想在 VB.Net 应用程序中接收请求,而不是从 VB.Net 发送。

谁能帮帮我?

谢谢

【问题讨论】:

  • 如果您是从头开始编写此应用程序,请从ASP Net Core project开始
  • foreach(var result in completedTasks.Select(t=>t.Result)) 和 "t" 没有在任何地方定义 - t 是completedTasks 列表中任何类型的变量。 VB 中的等价物是这样的 Dim strings = {"my", "array", "of", "strings"} strings.Select(Function(str) str & "x") -> str 是一个字符串,因为strings 是一个字符串数组,Select 命令将一个小函数作为参数。定义函数中命名的参数应为 Select 正在操作的集合中对象的类型
  • 在这种情况下str 的内容首先是"my",然后是"array",然后是"of",然后是"strings"。结果,这将输出一个序列"myx","arrayx","ofx","stringsx"
  • 谢谢,我不知道委托的这种写法,我更习惯用单独的方法写,这样更清楚
  • 这是一个 c#{} 肯定比 VB 好得多的领域。那些代表只有一行,所以 return 和 end 函数被省去了.. 只要你可以形成一个 lambda,它是一个返回值的单行(或者如果你这样做 @987654336 则不是单行@) 没关系。在我的回答中,它们也可以是单行,只是它们的行很长,所以在 SO 中使它们可读并不总是那么容易

标签: json vb.net httprequest


【解决方案1】:

最近我使用 Unosquare 的 EmbedIO 进行了此操作。使用 Nuget 将 EmbedIO 包安装到新的 win 表单中(不必这样做;您可以稍后将其撕开,但我使用 winforms 来创建此演示),然后将所有这些代码粘贴到 Form1.vb 的顶部:

Imports EmbedIO
Imports EmbedIO.Routing
Imports EmbedIO.WebApi


Public Class Form1

    Private server As WebServer

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Dim url = "http://localhost:9696/"

        server = CreateWebServer(url)
        server.RunAsync()

    End Sub



    ' Create and configure our web server.
    Private Shared Function CreateWebServer(ByVal url As String) As WebServer
        ' First, we will configure our web server by adding Modules.
        Dim server = New WebServer(
            Function(o)
                Return o.WithUrlPrefix(url).WithMode(HttpListenerMode.Microsoft)
            End Function
        ) _
        .WithWebApi("/api",
            Function(m)
                Return m.WithController(Of ApiController)()
            End Function
        )

        Return server
    End Function
End Class

Public Class ApiController
    Inherits WebApiController

    <Route(HttpVerbs.Post, "/data")>
    Public Async Function PostJsonData() As Task(Of ActionResult)
        Dim data = Await HttpContext.GetRequestDataAsync(Of MyJsonThing)()
        'install some tool like PostMan and POST some json data, like { "MyJsonThing": { "SomeProperty": "Hello" } }
        'do stuff here
        'return a response here
    End Function

    <Route(HttpVerbs.Get, "/ping")>
    Public Function Ping() As String
        Return "pong"
    End Function

End Class

Public Class MyJsonThing
    Public SomeProperty As String
End Class

然后运行应用程序,打开网络浏览器并导航到 http://localhost:9696/api/ping

你应该看到“pong”;如果不检查你的防火墙

剩下的就看你自己了!

【讨论】:

  • 谢谢。我的 VB.Net 应用程序是一个 WinForms 应用程序,所以如果我将这个包集成到我的应用程序中,这段代码肯定会适合
猜你喜欢
  • 1970-01-01
  • 2018-11-13
  • 1970-01-01
  • 1970-01-01
  • 2018-07-19
  • 2017-07-30
  • 2019-06-14
  • 2018-06-03
  • 1970-01-01
相关资源
最近更新 更多