在REST Web服务调用后,调用方法未获得返回值

问题描述 投票:0回答:1

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

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

  • 方法1调用方法2
  • method2调用方法3
  • method3调用webmethod
  • method3从webmethod获取返回值
  • method2什么也没有得到
  • method1一无所获

如果从我的method3中删除对Web服务的调用,并直接将一个新的ApiReturn对象返回给method2,则method2和method1将获得应有的值(实际上method未获得该值

我对REST Webservice的世界非常陌生,所以我一无所知...您能帮我吗?这是我的代码:

方法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

Method2:RunAsync和Method3:SendEmailToProviderAsync

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

顺便欢迎对我的代码进行任何评论以帮助我改进它。

非常感谢!

asp.net vb.net rest
1个回答
0
投票

我知道了:调用网络方法时遇到了同样的问题,我在通话结束时添加了.ConfigureAwait(False)来解决了这个问题。因此,我对我的SendEmailToProviderAsync调用也一样:

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

我认为我的呼叫不再异步,但这不是问题。

© www.soinside.com 2019 - 2024. All rights reserved.