语言翻译RESTful API两次返回第一句话

时间:2017-04-12 15:22:48

标签: ibm-cloud ibm-watson language-translation machine-translation

将REST与Basic Auth和FormUrlEncoded有效负载一起使用多个'文本'条目(本质上,一个单词文档表示为8个句子),当我调用它时,它返回翻译,但它返回第一个句子两次,使翻译的数组与初始请求不同步。有什么基本的东西我不见了吗?我也被困在.net40上了。

var payload = new FormUrlEncodedContent(watsonValues);
var translationResponse = _watsonClient.PostAsync($"{_watsonBase}/v2/translate", payload).Result;
if (translationResponse.IsSuccessStatusCode)
{
    var responsePayload = translationResponse.Content.ReadAsStringAsync().Result;
    var watsonTranslations = JsonConvert.DeserializeObject<WatsonMtResponse>(responsePayload);

    foreach (var translation in watsonTranslations.Translations)
    {
        translatedList.Add(translation.Translation);
    }
}
else
{
    translationResponse.EnsureSuccessStatusCode();
}

1 个答案:

答案 0 :(得分:2)

我通过提出基于Json的请求而不是之前发出的FormUrlEncoded请求来解决这个问题。代码基本上就是......

var translationResponse = _watsonClient.PostAsync($"{_watsonBase}/v2/translate", 
                new StringContent(JsonConvert.SerializeObject(mtRequest),
                Encoding.UTF8,
                "application/json"))
                .Result;

            if (translationResponse.IsSuccessStatusCode)
            {
                var responsePayload = translationResponse.Content.ReadAsStringAsync().Result;
                var watsonTranslations = JsonConvert.DeserializeObject<WatsonMtResponse>(responsePayload);

                foreach (var translation in watsonTranslations.Translations)
                {
                    translatedList.Add(translation.Translation);
                }
            }
            else
            {
                translationResponse.EnsureSuccessStatusCode();
            }

Json对象看起来像这样......

 class WatsonMtRequest
 {
    [JsonProperty("model_id")]
    public string ModelId { get; set; }
    [JsonProperty("text")]
    public List<string> Text { get; set; }
 }