Skip to main content
 首页 » 编程设计

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

2024年08月06日43bonelee

我希望使用 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。