1

使用具有基本验证REST和多个“文”的条目(基本上,一个word文档表示为8句)一FormUrlEncoded有效载荷,当我把它返回翻译的API,但它返回第一个句子两次,使翻译的数组与初始请求不同步。有什么基本的,我失踪了?我也被困在.net40上。语言翻译的RESTful API返回的第一句话两次

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(); 
} 
+0

您可以加入的请求和响应数据的例子吗?另外,你可以详细说明.net40问题吗? –

+0

@克里斯我切换到使用JSON有效载荷的要求和它的工作如预期。在此之前,我使用带有多个文本元素的Form Encoded标头请求。在.NET 4.0的问题是关系到使用沃森库/ SDK,我不能对部署现有系统由于与.NET的旧版本,我们正在使用的各种矛盾。 – StephenH

+0

很酷。如果切换到JSON为你工作,你可以将其添加为自己的答案,并接受它。 –

回答

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; } 
}