调用方法在 REST Web 服务调用后不获取返回值



我有一个REST Web服务(asp.net 核心2.2 c#(,我从一个 asp.net 应用程序(VB.net 中的Webform(调用它。

标题不是很准确:我从我的网络服务中获取了一个值,但是调用网络方法的方法之前的方法没有得到返回值。所以我有:

方法
  • 1 调用方法 2
  • 方法
  • 2 调用方法3
  • 方法
  • 3 调用网络方法
  • 方法
  • 3 从Web方法获取返回值
  • 方法 2 一无所获
  • 方法1也一无所获

如果我从我的 method3 中删除对 Web 服务的调用并直接将一个新的 ApiReturn 对象返回给方法2,则方法2 和方法1 将按预期获取值(实际上方法没有获取值

我对 REST 网络服务的世界很陌生,所以我不知道......你能帮我吗?这是我的代码:

方法1:BtnTestAnything_Click

Protected Sub BtnTestAnything_Click(sender As Object, e As EventArgs)
Dim currentQuote As Quote = New Quote With {
.NumberEpt = 13245,
.Origin = "DM")
LoemailApi.RunAsync(currentQuote).GetAwaiter().GetResult()
End Sub

方法 2:运行异步和方法3:发送电子邮件到提供程序异步

Friend Class LoemailApi
Public Shared Async Function RunAsync(myQuote As Quote) As Task(Of ApiReturn)
client.BaseAddress = New Uri("loemail_api_uri")
client.DefaultRequestHeaders.Accept.Clear()
client.DefaultRequestHeaders.Accept.Add(New MediaTypeWithQualityHeaderValue("loemail_api_media"))
client.DefaultRequestHeaders.AcceptCharset.Clear()
client.DefaultRequestHeaders.AcceptCharset.Add(New StringWithQualityHeaderValue("loemail_api_charset"))
Dim ret = Await SendEmailToProviderAsync(myQuote)
' I NEVER GET HERE EXCEPT WHEN I REMOVE THE CALL client.PostAsJsonAsync() TO WEB-METHOD IN SendEmailToProviderAsync()
Console.WriteLine(ret)
Return ret
End Function
Private Shared Async Function SendEmailToProviderAsync(ByVal quote As Quote) As Task(Of ApiReturn)
Dim response As HttpResponseMessage = Await client.PostAsJsonAsync("api/providersSend", quote).ConfigureAwait(False)
response.EnsureSuccessStatusCode()
Dim ret As ApiReturn = New ApiReturn()
If (response.IsSuccessStatusCode) Then
ret = Await response.Content.ReadAsAsync(Of ApiReturn)()
End If
' HERE I HAVE A VALUE IN ret, ACCORDINGLY TO WHAT MY WEBSERVICE RESPOND
Return ret   
End Function
End Class

顺便说一下,欢迎对我的代码发表任何评论以帮助我改进它。

多谢!

我明白了:我在调用 web 方法时遇到了同样的问题,我通过添加 .配置等待(假(在我的通话结束时。所以我对我的 SendEmailTo ProviderAsync 调用也是如此:

ret = Await SendEmailToProviderAsync(myQuote).ConfigureAwait(False)

我假设我的呼叫不再是异步的,但这不是问题。

最新更新