【问题标题】:Calling method doesn't get the return value after a REST web-service call调用 REST Web 服务后调用方法未获得返回值
【发布时间】:2020-01-21 14:48:44
【问题描述】:

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

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

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

如果我从我的method3中移除对web-service的调用,并直接返回一个新的ApiReturn对象给method2,method2和method1得到他们应该得到的值(实际上method没有得到值

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

方法一: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】:

    我明白了:我在调用 web 方法时遇到了同样的问题,我通过在通话结束时添加 .ConfigureAwait(False) 解决了这个问题。所以我对我的 SendEmailToProviderAsync 调用也是如此:

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

    我认为我的调用不再是异步的,但这不是问题。

    【讨论】:

      猜你喜欢
      • 2013-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 2015-03-17
      • 1970-01-01
      • 1970-01-01
      • 2012-01-08
      相关资源
      最近更新 更多