Ibm cloud 语言转换器RESTful API返回第一句话两次
使用REST和Basic Auth以及带有多个“文本”条目的FormUrlEncoded有效负载(基本上是一个用8个句子表示的word文档),当我调用API时,它返回翻译,但它返回第一个句子两次,使翻译后的数组与初始请求不同步。我有没有遗漏一些基本的东西?我被困在网络40上了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
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的窍门,感谢您的轻推!