我希望使用 C# WebClient
提供的简单语法向 Google Translate API 发送多个值。要向 API 发送多个值,每个值都必须具有相同的查询字符串键,例如:q=value1&q=value2
。
我不能使用默认的 GET 机制,只能将这些值放在查询字符串上,因为我的某些值太大了。因此,我必须 POST 这些值以确保我设置了 X-HTTP-Method-Override
header 。
问题是,要发布我的值,我需要使用 WebClient.UploadValues()
方法,该方法期望将值显示为 NameValueCollection
。 NameValueCollection
支持具有相同键的多个值,但不是 Google Translate API 将识别为单独值的方式(它创建一个简单的逗号分隔值集,保存在单个键唯一键下).
如何使用 WebClient
类 POST 多个值,每个值都具有相同的键?
如需进一步阅读,请参阅:
最佳答案
要做到这一点,您可以使用 WebClient.UploadString()
方法,尽管有几个陷阱需要注意。首先是一些代码:
using (var webClient = new WebClient())
{
webClient.Encoding = Encoding.UTF8;
webClient.Headers.Add("X-HTTP-Method-Override", "GET");
webClient.Headers.Add("content-type", "application/x-www-form-urlencoded");
var data = string.Format("key={0}&source={1}&target={2}&q={3}&q={4}", myApiKey, "en", "fr", urlEncodedValue1, urlEncodedvalue2);
try
{
var json = webClient.UploadString(GoogleTranslateApiUrl, "POST", data);
var result = JsonConvert.DeserializeObject<dynamic>(json);
translatedValue1 = result.data.translations[0].translatedText;
translatedValue2 = result.data.translations[1].translatedText;
}
catch (Exception ex)
{
loggingService.Error(ex.Message);
}
}
您可以看到我正在将要发送到 Google Translate API 的数据格式化为 application/x-www-form-urlencoded
字符串。这允许将具有相同键的多个值一起格式化。
要正确发布此内容,您必须记住设置 WebClient.Encoding
属性,在我的例子中为 UTF8
,因为 WebClient
将在发布之前将字符串上传到字节数组中。
您还必须记住将 content-type
header 设置为 application/x-www-form-urlencoded
以确保正确打包有效负载。
最后,您必须记住对要翻译的值进行 urlencode。
关于c# - 我如何使用简单的 C# WebClient 使用相同的键(到谷歌翻译)发布多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28193914/