У меня есть следующий код от Microsoft для использования их API для перевода текста. Я зарегистрировался для ключей, и код работает, но я не могу понять, как преобразовать это обратно из async / await. Обычно спрашивают, как преобразовать код в async / await.
Мне нужно, чтобы это было синхронно, чтобы его можно было вызвать из SQL Server CLR-функции, которую я изучил не поддерживает asyn c. Я предполагаю, что не могу использовать HttpClient
или HttpRequestMessage
, но я иду по кругу, пытаясь выяснить это.
// ***** PERFORM TRANSLATION ON BUTTON CLICK
private async void TranslateButton_Click(object sender, EventArgs e)
{
string textToTranslate = TextToTranslate.Text.Trim();
// Send translation request
object[] body = new object[] { new { Text = textToTranslate } };
var requestBody = JsonConvert.SerializeObject(body);
using (var client = new HttpClient())
using (var request = new HttpRequestMessage())
{
request.Method = HttpMethod.Post;
request.RequestUri = new Uri("https://api.cognitive.microsofttranslator.com/translate?api-version=3.0&from=en&to=fr");
request.Content = new StringContent(requestBody, Encoding.UTF8, "application/json");
request.Headers.Add("Ocp-Apim-Subscription-Key", "00000000");
var response = await client.SendAsync(request);
var responseBody = await response.Content.ReadAsStringAsync();
var result = JsonConvert.DeserializeObject<List<Dictionary<string, List<Dictionary<string, string>>>>>(responseBody);
var translation = result[0]["translations"][0]["text"];
// Update the translation field
TranslatedTextLabel.Content = translation;
}
}
Это некоторый код 2013 года. Я предполагаю, что это работал, но текстовый API переводчика изменился с тех пор. Все почтовые запросы должны быть в формате Json и токены доступа больше не являются обязательными.
public static string CallTranslator(string txtToTranslate)
{
string uri = "http://api.microsofttranslator.com/v2/Http.svc/Translate?text=" + System.Web.HttpUtility.UrlEncode(txtToTranslate) + "&from=en&to=fr";
System.Net.WebRequest translationWebRequest = System.Net.WebRequest.Create(uri);
string headerValue = GetAccessToken();
translationWebRequest.Headers.Add("Authorization", headerValue);
System.Net.WebResponse response = null;
response = translationWebRequest.GetResponse();
System.IO.Stream stream = response.GetResponseStream();
System.Text.Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
System.IO.StreamReader translatedStream = new System.IO.StreamReader(stream, encode);
System.Xml.XmlDocument xTranslation = new System.Xml.XmlDocument();
xTranslation.LoadXml(translatedStream.ReadToEnd());
return xTranslation.InnerText;
}