簡體   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