Tôi đã triển khai mã C# bằng cách sử dụng api Phiên dịch Google V2 bằng Phương thức GET. Dịch thành công các văn bản nhỏ nhưng khi tăng độ dài văn bản và mất 1.800 ký tự (bao gồm các thông số URI), tôi nhận được lỗi "URI quá lớn".Google Translate V2 không thể hanlde bản dịch văn bản lớn từ C#
Ok, tôi đã đốt cháy tất cả các đường dẫn và điều tra vấn đề trên nhiều trang được đăng trên Internet. Tất cả chúng đều nói rõ ràng phương thức GET nên được overriden để mô phỏng một phương thức POST (có nghĩa là cung cấp hỗ trợ cho 5.000 URI ký tự) nhưng không có cách nào để tìm ra một ví dụ mã cho nó.
Có ai có ví dụ nào hoặc có thể cung cấp một số thông tin không?
[EDIT] Đây là mã Tôi đang sử dụng:
String apiUrl = "https://www.googleapis.com/language/translate/v2?key={0}&source={1}&target={2}&q={3}";
String url = String.Format(apiUrl, Constants.apiKey, sourceLanguage, targetLanguage, text);
Stream outputStream = null;
byte[] bytes = Encoding.ASCII.GetBytes(url);
// create the http web request
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.KeepAlive = true;
webRequest.Method = "POST";
// Overrride the GET method as documented on Google's docu.
webRequest.Headers.Add("X-HTTP-Method-Override: GET");
webRequest.ContentType = "application/x-www-form-urlencoded";
// send POST
try
{
webRequest.ContentLength = bytes.Length;
outputStream = webRequest.GetRequestStream();
outputStream.Write(bytes, 0, bytes.Length);
outputStream.Close();
}
catch (HttpException e)
{
/*...*/
}
try
{
// get the response
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
if (webResponse.StatusCode == HttpStatusCode.OK && webRequest != null)
{
// read response stream
using (StreamReader sr = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8))
{
string lista = sr.ReadToEnd();
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(TranslationRootObject));
MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(lista));
TranslationRootObject tRootObject = (TranslationRootObject)serializer.ReadObject(stream);
string previousTranslation = string.Empty;
//deserialize
for (int i = 0; i < tRootObject.Data.Detections.Count; i++)
{
string translatedText = tRootObject.Data.Detections[i].TranslatedText.ToString();
if (i == 0)
{
text = translatedText;
}
else
{
if (!text.Contains(translatedText))
{
text = text + " " + translatedText;
}
}
}
return text;
}
}
}
catch (HttpException e)
{
/*...*/
}
return text;
}
Bạn có thể cho chúng tôi biết mã bạn hiện đang sử dụng không? Chiến lược này hơi khác nếu bạn đang sử dụng 'WebClient' so với' WebRequest'. – user7116