1

En utilisant REST avec Basic Auth et une charge utile FormUrlEncoded avec plusieurs entrées 'text' (essentiellement, un document Word représenté comme 8 phrases), quand j'appelle l'API, il retourne les traductions, mais il renvoie deux fois la première phrase, ce qui désynchronise le tableau traduit par rapport à la requête initiale. Y a-t-il quelque chose de fondamental qui me manque? Je suis bloqué sur .net40 aussi.Language Translator RESTful API retournant la première phrase deux fois

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

Pourriez-vous ajouter un exemple des données de requête et de réponse? Aussi, pouvez-vous élaborer sur le problème .net40? –

+0

@Chris J'ai changé la requête pour utiliser une charge utile JSON et cela a fonctionné comme prévu. Avant cela, j'utilisais une requête d'en-tête Form Encoded avec plusieurs éléments de texte. Le problème .Net 4.0 est lié à l'utilisation des bibliothèques Watson/SDK que je ne peux pas déployer sur des systèmes existants en raison de divers conflits avec l'ancienne version de .NET que nous utilisons. – StephenH

+0

Cool. Si le passage à Json fonctionne pour vous, vous pouvez l'ajouter comme votre propre réponse et l'accepter. –

Répondre

2

J'abordé la question en faisant la demande JSON base plutôt que la demande FormUrlEncoded j'ai fait précédemment. Le code est essentiellement ...

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

Et l'objet JSON ressemble à ceci ...

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