我有一个REST Web服务(asp.net核心2.2 c#),我是从asp.net应用程序(VB.net中的webform)调用它的。
标题不是很准确:我从Web服务中获得了一个值,但是调用Web方法的方法之前的方法没有获得返回值。所以我有:
如果从我的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
顺便欢迎对我的代码进行任何评论以帮助我改进它。
非常感谢!
我知道了:调用网络方法时遇到了同样的问题,我在通话结束时添加了.ConfigureAwait(False)来解决了这个问题。因此,我对我的SendEmailToProviderAsync调用也一样:
ret = Await SendEmailToProviderAsync(myQuote).ConfigureAwait(False)
我认为我的呼叫不再异步,但这不是问题。