Я не могу получить имена языков, используя Text Translation API. Я получаю список доступных языков с помощью этого метода:Как получить имена языков с помощью API перевода текста с помощью GetLanguageNames
public async Task<List<string>> GetLanguagesForTranslateAsync()
{
string requestUri = "https://api.microsofttranslator.com/v2/http.svc/GetLanguagesForTranslate";
string accessToken = await this.auth.GetTokenAsync();
string response = await this.GetAsync(requestUri, accessToken);
XDocument xml = XDocument.Parse(response);
List<string> languages = new List<string>();
foreach (XElement element in xml.Root.Descendants())
{
languages.Add(element.Value);
}
return languages;
}
private async Task<string> GetAsync(string url, string bearerToken)
{
using (HttpClient httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken);
HttpResponseMessage response = await httpClient.GetAsync(url);
return await response.Content.ReadAsStringAsync();
}
}
Я этот случай я получаю XML с кодами языков, таких как «ан», «эс», «фр» или «ZH-CHT», но я хочу, чтобы получить «английский», «испанский», «французский» или «китайский (традиционный)». Глядя the documentation Я попробовал этот метод:
public async Task<List<string>> GetLanguageNamesAsync(string locale, List<string> languageCodes)
{
string requestUri = "https://api.microsofttranslator.com/v2/http.svc/GetLanguageNames";
string content = $"locale=en&languageCodes=en,es,fr,zh-CHT";
string accessToken = await this.auth.GetTokenAsync();
string response = await this.PostAsync(requestUri, accessToken, content);
XDocument xml = XDocument.Parse(response);
List<string> languages = new List<string>();
foreach (XElement element in xml.Root.Descendants())
{
languages.Add(element.Value);
}
return languages;
}
private async Task<string> PostAsync(string url, string bearerToken, string content)
{
using (HttpClient httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken);
HttpResponseMessage response = await httpClient.PostAsync(url, new StringContent(content));
return await response.Content.ReadAsStringAsync();
}
}
Ответ Я получаю этот запрос:
Запрос об ошибке
Error Status Code: 'InternalServerError'
Детали: сервер обнаружил ошибку обработки запроса. Дополнительные сведения см. В журналах сервера.
Реальный ответ XML:
<html version="-//W3C//DTD XHTML 2.0//EN"
xml:lang="en"
xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<HEAD>
<TITLE>Request Error</TITLE>
</HEAD>
<BODY>
<DIV id="content">
<P class="heading1"><B>Error Status Code:</B> 'InternalServerError'</P>
<P><B>Details: </B>The server encountered an error processing the request. Please see the server logs for more details.</P>
<!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-->
</DIV>
</BODY>
</html>
Вы знаете, что происходит? Есть ли что-нибудь еще, что мне нужно, чтобы сделать запрос?
Спасибо за помощь, но я потерян, я пытаюсь сделать это с помощью C#, но ваш ответ кажется консольным командами, но я не уверен. Возможно, вы можете дать мне более подробную информацию о том, как использовать эти команды. У меня нет проблем с GetLanguagesForTranslate и Translate, используя C#, но у меня есть с GetLanguageNames. – Jon
Научитесь использовать 'curl' для проверки правильного вызова API. Ваша проблема не связана с C#. Если вы упростили проблему, исключив C# с помощью 'curl', вы бы нашли решение за считанные минуты, по крайней мере, я нашел вашу проблему за считанные минуты. Проблема заключается в том, что 'GetLanguageNames' не является вызовом API v2. Это только v1. Ваша конечная точка неверна. – BSalita
'curl' отлично подходит для поиска таких проблем. Microsoft и другие поставщики API должны показывать команды 'curl' для каждого из своих API. Это сэкономит много времени. К сожалению, Microsoft Cognitive часто не показывает команду 'curl', но когда они это делают, они плохо ошибаются. Если я не вижу в документации документа 'curl', я сразу же подозреваю, что API не работает так документирован. – BSalita