Ibm cloud 语言转换器RESTful API返回第一句话两次

Ibm cloud 语言转换器RESTful API返回第一句话两次,ibm-cloud,ibm-watson,language-translation,machine-translation,Ibm Cloud,Ibm Watson,Language Translation,Machine Translation,使用REST和Basic Auth以及带有多个“文本”条目的FormUrlEncoded有效负载(基本上是一个用8个句子表示的word文档),当我调用API时,它返回翻译,但它返回第一个句子两次,使翻译后的数组与初始请求不同步。我有没有遗漏一些基本的东西?我被困在网络40上了 var payload = new FormUrlEncodedContent(watsonValues); var translationResponse = _watsonClient.PostAsync($"{_wa

使用REST和Basic Auth以及带有多个“文本”条目的FormUrlEncoded有效负载(基本上是一个用8个句子表示的word文档),当我调用API时,它返回翻译,但它返回第一个句子两次,使翻译后的数组与初始请求不同步。我有没有遗漏一些基本的东西?我被困在网络40上了

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();
}
var有效载荷=新的FormUrlEncodedContent(watsonValues);
var translationResponse=_watsonClient.PostAsync($“{u watsonBase}/v2/translate”,有效负载);
if(translationResponse.IsSuccessStatusCode)
{
var responsePayload=translationResponse.Content.ReadAsStringAsync().Result;
var watsonTranslations=JsonConvert.DeserializeObject(responsePayload);
foreach(watsonTranslations.Translations中的var翻译)
{
translatedList.Add(translation.translation);
}
}
其他的
{
translationResponse.EnsureAccessStatusCode();
}

我通过使请求基于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();
            }
var translationResponse=\u watsonClient.PostAsync($“{u watsonBase}/v2/translate”,
新的StringContent(JsonConvert.SerializeObject(mtRequest),
Encoding.UTF8,
“应用程序/json”))
.结果;
if(translationResponse.IsSuccessStatusCode)
{
var responsePayload=translationResponse.Content.ReadAsStringAsync().Result;
var watsonTranslations=JsonConvert.DeserializeObject(responsePayload);
foreach(watsonTranslations.Translations中的var翻译)
{
translatedList.Add(translation.translation);
}
}
其他的
{
translationResponse.EnsureAccessStatusCode();
}
Json对象如下所示

 class WatsonMtRequest
 {
    [JsonProperty("model_id")]
    public string ModelId { get; set; }
    [JsonProperty("text")]
    public List<string> Text { get; set; }
 }
class WatsonMtRequest
{
[JsonProperty(“模型id”)]
公共字符串ModelId{get;set;}
[JsonProperty(“文本”)]
公共列表文本{get;set;}
}

能否添加请求和响应数据的示例?另外,你能详细说明一下.net40的问题吗?@Chris我将请求转换为使用JSON有效负载,结果一切正常。在此之前,我使用了一个带有多个文本元素的表单编码头请求。.Net 4.0问题与Watson Libraries/SDK的使用有关,由于与我们正在使用的.Net旧版本存在各种冲突,我无法针对现有系统部署Watson Libraries/SDK。如果切换到Json对您有效,您可以添加它作为您自己的答案并接受它。谢谢@Chris。仍然掌握StackExchange的窍门,感谢您的轻推!