-1
我無法使用文本翻譯API獲取語言名稱。我得到的可用語言用這種方法:如何通過GetLanguageNames使用文本翻譯API獲取語言名稱
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();
}
}
我這種情況下,我得到像「EN」,「ES」,「FR」或「ZH-CHT」語言代碼的XML,但我想「英語」,「西班牙語」,「法語」或「中國(傳統)」。展望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();
}
}
我這個請求得到響應:
請求錯誤
錯誤狀態代碼: '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和使用C#翻譯的問題,但我確實有GetLanguageNames。 – Jon
學習使用'curl'來驗證API的正確調用。你的問題與C#無關。如果你已經通過使用'curl'消除了C#來簡化了這個問題,那麼你會在幾分鐘內找到解決方案,至少我在幾分鐘內發現了你的問題。問題是'GetLanguageNames'不是一個v2 API調用。它只是v1。你的端點是錯誤的。 – BSalita
'curl'非常適合尋找這樣的問題。微軟和其他API提供商應該爲他們的每個API顯示'curl'命令。這將節省很多時間。不幸的是,微軟認知通常不會顯示「curl」命令,但是當他們這樣做時,他們是錯誤的。如果我在文檔中沒有看到'curl'命令,我立即懷疑這個API不能像記錄那樣工作。 – BSalita