繁体   English   中英

如何使用简单的C#WebClient使用相同的密钥(使用Google Translate)发布多个值

[英]How do I POST multiple values with the same key (to Google Translate) using the simple C# WebClient

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

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

问题是,要POST我的值,我需要使用WebClient.UploadValues()方法,该方法要求将值显示为NameValueCollection NameValueCollection支持具有相同键的多个值,但不支持Google Translate API将其识别为单独的值(它创建一个以单个键唯一键保存的简单逗号分隔值集)。

如何使用WebClient类发布多个值,每个值都使用相同的键?

进一步阅读请参阅:

要做到这一点,你可以使用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);
    }
}

您可以看到我正在格式化要作为application/x-www-form-urlencoded字符串发送到Google Translate API的数据。 这允许将具有相同键的多个值格式化在一起。

要正确发布您必须记住将WebClient.Encoding属性(在我的情况下)设置为UTF8 ,因为WebClient会在发布之前将要上载的字符串转换为字节数组。

您还必须记住将content-type标头设置为application/x-www-form-urlencoded从而确保正确打包有效负载。

最后,您必须记住要将要翻译的值进行urlencode。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM