Microsoft Translator API v3, ASP.NET VB.NET - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь вызвать 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] когда я ожидаю переведенную строку.

...