【发布时间】: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
顺便说一句,欢迎对我的代码发表任何评论以帮助我改进它。
非常感谢!
【问题讨论】: