Я пытаюсь вызвать MS Translator API через функцию ASP.NET для перевода различных строк из базы данных.
Все примеры из MS приведены в C #, поэтому я добавляю в конвертер и иду изтам.Из моих поисков я почти уверен, что это проблема асинхронного ожидания.Я также пытался установить strString для разных вещей в разное время, но он выдает ту же ошибку, как будто я не ожидаю должным образом.
На странице aspx у меня есть это:
<%# functions.translate(Eval("Description").ToString) %>
Description
- это поле из базы данных, которое отображается правильно, если не передано в функцию перевода.У меня есть другие функции, которые я вызываю для выполнения различных задач и работы должным образом.
В моем файле 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]
когда я ожидаю переведенную строку.