【发布时间】:2019-11-17 12:45:55
【问题描述】:
我正在尝试通过 ASP.NET 函数调用 MS Translator API 来翻译数据库中的各种字符串。
MS 中的所有示例都是用 C# 给出的,所以我将其放入转换器并从那里开始。 根据我的搜索,我很确定这是一个异步/等待问题。我也尝试在不同的时间将 strString 设置为不同的东西,但它会引发相同的错误,就好像我没有正确等待一样。
从aspx页面我有这个:
<%# functions.translate(Eval("Description").ToString) %>
Description 是数据库中的一个字段,如果未传递给 translate 函数,则会正确显示。我还调用了其他函数来执行各种操作并正常工作。
在我的functions.vb中我有:
Public Class TranslationResult
Public Property Translations As Translation()
End Class
Public Class Translation
Public Property Text As String
Public Property [To] As String
End Class
Public Class functions
Public Shared Async Function translate(strString As String) As Task(Of String)
Dim host As String = "https://api.cognitive.microsofttranslator.com"
Dim route As String = "/translate?api-version=3.0&to=fr"
Dim key As String = "0000000000000000000000000"
Dim body As Object() = New Object() {New With {Key .Text = strString}}
Dim requestBody = JsonConvert.SerializeObject(body)
Using client = New HttpClient()
Using request = New HttpRequestMessage()
request.Method = HttpMethod.Post
request.RequestUri = New Uri(host & route)
request.Content = New StringContent(requestBody, Encoding.UTF8, "application/json")
request.Headers.Add("Ocp-Apim-Subscription-Key", key)
Dim response As HttpResponseMessage = Await client.SendAsync(request).ConfigureAwait(False)
Dim result As String = Await response.Content.ReadAsStringAsync()
Dim deserializedOutput As TranslationResult() = JsonConvert.DeserializeObject(Of TranslationResult())(result)
For Each o As TranslationResult In deserializedOutput
For Each t As Translation In o.Translations
strString = t.Text
Next
Next
End Using
End Using
Return strString
End Function
当我期待翻译字符串时,我得到的错误是在显示 System.Threading.Tasks.Task`1[System.String] 的网页上。
【问题讨论】:
-
你要翻译的代码的c#版本是什么?
-
该方法声明为
Async,这意味着如果您在其中返回String,它将返回Task(Of String),这就是为什么您会在您的页。要从Task获取String结果,您通常等待异步方法。不确定 ASPX 是否支持它,但如果支持,它将是<%# Await functions.translate(Eval("Description").ToString) %>。 -
转换后的代码示例指出“此示例需要 C# 7.1 或更高版本才能进行异步/等待。在函数前面添加等待。翻译等会导致错误““等待”只能在以下情况下使用包含在标有 'Async' 修饰符的方法或 lambda 表达式中。"
标签: asp.net json vb.net microsoft-translator