首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >微软Translator API v3,ASP.NET VB.NET

微软Translator API v3,ASP.NET VB.NET
EN

Stack Overflow用户
提问于 2019-07-08 09:54:12
回答 2查看 706关注 0票数 1

我试图通过一个ASP.NET函数调用MS Translator API来翻译数据库中的各种字符串。

所有来自MS的示例都是在C#中给出的,所以我抛出一个转换器,然后从那里开始。根据我的搜索,我非常确定这是一个异步/等待问题。我还尝试在不同的时间将strString设置为不同的东西,但它抛出了相同的错误,就好像我没有正确等待一样。

在aspx页面上,我看到了以下内容:

代码语言:javascript
复制
<%# functions.translate(Eval("Description").ToString) %>

Description是数据库中的一个字段,如果没有传递给translate函数,它会正确显示。我还有其他一些函数,我可以调用它们来做各种事情并正常工作。

在我的functions.vb中,我有:

代码语言:javascript
复制
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],而我期望的是翻译后的字符串。

EN

回答 2

Stack Overflow用户

发布于 2020-01-23 20:57:01

我使用你的代码作为基础,并使其正常工作。只需使用一个简单的Webform。

我没有更改代码中的任何内容,但系统提示我添加

代码语言:javascript
复制
Imports System.Net.Http

由Visual studio 2019提供

vb.aspx后面的最终整个webform代码如下所示:

代码语言:javascript
复制
Imports System.Net.Http
Imports System.Threading.Tasks
Imports Newtonsoft.Json

Public Class microsoftTranslator
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

   dim translatedText =  functions.translate( "This is going to be one, two, three in french").Result

End Sub

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
end class

End Class

要使其等待异步结果,请查看.result属性

票数 0
EN

Stack Overflow用户

发布于 2020-02-04 09:11:48

代码语言:javascript
复制
    <%@ Page Language="VB" %>

<%@ Import Namespace="System.IO" %>

<%@ Import Namespace="System.Net" %>

<!DOCTYPE html>

<script runat="server">

    Protected Sub Page_Load(sender As Object, e As EventArgs)
        Dim APIUrlToSend As String = "https://api.cognitive.microsofttranslator.com/translate?api-version=3.0&from=en&to=de"
        Dim MyMainRequest As HttpWebRequest = CType(HttpWebRequest.Create(APIUrlToSend), HttpWebRequest)
        MyMainRequest.Headers.Add("Ocp-Apim-Subscription-Key", "YOUR API CODE")
        MyMainRequest.ContentType = "application/json; charset=utf-8"
        MyMainRequest.Method = "POST"
        ' Send request
        Dim MyJavaScriptSerializer = New System.Web.Script.Serialization.JavaScriptSerializer()
        Dim TextToTranslate As String = MyJavaScriptSerializer.Serialize("Text to translate")
        Dim MyMainRequestBody As String = "[{ Text: " & TextToTranslate & " }]"
        Dim MyMainRequestBytesData As Byte() = Encoding.UTF8.GetBytes(MyMainRequestBody)
        MyMainRequest.ContentLength = MyMainRequestBytesData.Length
        Using RequestWriteStream = MyMainRequest.GetRequestStream()
            RequestWriteStream.Write(MyMainRequestBytesData, 0, MyMainRequestBytesData.Length)
        End Using
        Dim MyFinalResponse As HttpWebResponse = MyMainRequest.GetResponse()
        Dim MyFinalResponseStream As Stream = MyFinalResponse.GetResponseStream
        Dim MyFinalResponseStreamReader As New StreamReader(MyFinalResponseStream, Encoding.GetEncoding("utf-8"))
        Page.Response.Write(MyFinalResponseStreamReader.ReadToEnd())

    End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

    </div>
    </form>
</body>
</html>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56927519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档