0

我已经看到有关此问题的线程,但我的问题特别令人困惑。我有一个免费的 200 万字符订阅、一个有效的客户 ID 和密码。当我运行我的代码时,我可以成功调用 API 几次(我见过的最多的是 75 次连续成功调用)。然后每个其他调用都返回一个错误的请求响应:远程服务器返回一个错误:(400)错误请求。

我用我的凭据创建了一次令牌,然后再也没有创建它。我遍历一个文件,解析它,并通过调用 API 提交每个解析的字符串进行翻译。似乎我达到了我现在知道的某种限制。

查看我的帐户时,它似乎并没有忽略我已经翻译的字符,这让我非常怀疑我在创建令牌时使用了错误的凭据。我检查了四次,一切似乎都很好。

任何关于我可能在这里遗漏的指导将不胜感激。

这是创建令牌的代码。我确实认为免费订阅可能存在我不知道的未知限制。

static void gettoken()
    {
        //Get access token
        string clientID = "my client id";
        string clientSecret = "my secret";
        String strTranslatorAccessURI = "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13";
        String strRequestDetails = string.Format("grant_type=client_credentials&client_id={0}&client_secret={1}&scope=http://api.microsofttranslator.com", clientID, clientSecret);

        System.Net.WebRequest webRequest = System.Net.WebRequest.Create(strTranslatorAccessURI);
        webRequest.ContentType = "application/x-www-form-urlencoded";
        webRequest.Method = "POST";

        byte[] bytes = System.Text.Encoding.ASCII.GetBytes(strRequestDetails);
        webRequest.ContentLength = bytes.Length;
        using (System.IO.Stream outputStream = webRequest.GetRequestStream())
        {
            outputStream.Write(bytes, 0, bytes.Length);
        }
        System.Net.WebResponse webResponse = webRequest.GetResponse();

        System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(AdmAccessToken));
        AdmAccessToken token = (AdmAccessToken)serializer.ReadObject(webResponse.GetResponseStream());

        MyGlobals.headerValue = "Bearer " + token.access_token;
    }

这是调用 API 本身的代码。我从循环中调用 API 方法。

static void RunBing(string sterm)
    {
        //Submit the translation request
        string txtToTranslate = sterm;
        string uri = "http://api.microsofttranslator.com/v2/Http.svc/Translate?text=" + txtToTranslate + "&from=en&to=es";
        System.Net.WebRequest translationWebRequest = System.Net.WebRequest.Create(uri);
        translationWebRequest.Headers.Add("Authorization", MyGlobals.headerValue);
        System.Net.WebResponse response = null;
        try {
            response = translationWebRequest.GetResponse();
        }
        catch (Exception e)
        {
            Console.WriteLine("Term failed: " + sterm);
            Console.WriteLine(e);
            return;
        }
        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());
        MyGlobals.xlation = xTranslation.InnerText;
    } 

多次成功调用 API 后,我开始收到以下消息: System.Net.WebException: The remote server returned an error: (400) Bad Request。在 System.Net.HttpWebRequest.GetResponse() 在 Translate.TranslateText.Program.RunBing(String sterm)

4

0 回答 0