c# - 我如何使用简单的 C# WebClient 使用相同的键(到谷歌翻译)发布多个值

标签 c# webclient google-translate

我希望使用 C# WebClient 提供的简单语法向 Google Translate API 发送多个值。要向 API 发送多个值,每个值都必须具有相同的查询字符串键,例如:q=value1&q=value2

我不能使用默认的 GET 机制,只能将这些值放在查询字符串上,因为我的某些值太大了。因此,我必须 POST 这些值以确保我设置了 X-HTTP-Method-Override header 。

问题是,要发布我的值,我需要使用 WebClient.UploadValues() 方法,该方法期望将值显示为 NameValueCollectionNameValueCollection 支持具有相同键的多个值,但不是 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/

相关文章:

c# - protobuf-net 异常 : No serializer defined for type: System. Xml.XmlDocument

c# - 将字符串转换为可排序数字

c# - 使用 Azure 移动服务从多个表读取数据

powershell - Powershell 可以用来列出 URL 目录的内容吗?

c# - 在C#中从FTP读取文件到内存

php - 如何将印地语(梵文脚本)转换为英文字母

c# - 是否可以在应用程序启动时不使用服务定位器来实现依赖注入(inject)?

c# - 使用 WebClient 对网站执行 ping 操作

javascript - 谷歌翻译 html 小部件不工作

java - 如何在一个 AsyncTask 中同时执行多个函数?