C# 在Asp.net中发送多个请求时,Google translate API(付费API)请求错误导致随机发送几个请求

C# 在Asp.net中发送多个请求时,Google translate API(付费API)请求错误导致随机发送几个请求,c#,asp.net,google-translate,C#,Asp.net,Google Translate,您好,我正在开发一个多语言Web应用程序,它是在Asp.net 4.0中用C#开发的。 我正在为每种语言创建一个资源文件,在其中我必须翻译整个应用程序。首先,我用英语创建了一个主资源文件。现在,我们获取Language.resx文件的键值对,并将该值转换为所需的语言,然后将该值插入另一个resx文件(例如Language.hi.resx)。对于值的转换,我对Language.resx文件的每个值都使用Google Language translator API,并使用以下函数来转换该值

您好,我正在开发一个多语言Web应用程序,它是在Asp.net 4.0中用C#开发的。 我正在为每种语言创建一个资源文件,在其中我必须翻译整个应用程序。首先,我用英语创建了一个主资源文件。现在,我们获取Language.resx文件的键值对,并将该值转换为所需的语言,然后将该值插入另一个resx文件(例如Language.hi.resx)。对于值的转换,我对Language.resx文件的每个值都使用Google Language translator API,并使用以下函数来转换该值

     public static string TranslateText(string Text, string tragetlan, string sourceLang)
    {
        try
        {
            LanguagesListResponse ls = new LanguagesListResponse();
            Google.Apis.Translate.v2.Data.LanguagesResource ss = new Google.Apis.Translate.v2.Data.LanguagesResource();
            ss.Language = tragetlan;

            // GetLanguageCode
            string googlekey = "Axxxxxxxxxxxxxxxxxxxxxxxxxxxxw";

            var service = new TranslateService(new BaseClientService.Initializer()
            {
                ApiKey = googlekey
            });
            //new TranslateService { Key = googlekey };
            ICollection<string> data = new Collection<string>();
            string[] srcText = new[] { Text };
            TranslationsListResponse response = service.Translations.List(srcText, tragetlan).Fetch();
            var translations = new List<string>();

            // We need to change this code...
            // currently this code 
            foreach (Google.Apis.Translate.v2.Data.TranslationsResource translation in response.Translations)
            {
                translations.Add(translation.TranslatedText);
            }
            return translations[0];
        }
        catch (Exception ex)
        {
            return Text;
        }
    }
公共静态字符串TranslateText(字符串文本、字符串tragetlan、字符串源语言)
{
尝试
{
LanguagesListResponse ls=新语言SlistResponse();
Google.api.Translate.v2.Data.LanguagesResource ss=新的Google.api.Translate.v2.Data.LanguagesResource();
ss.Language=tragetlan;
//GetLanguageCode
字符串googlekey=“axxxxxxxxxxxxxxxxxxxxxxxxx”;
var service=new TranslateService(new BaseClientService.Initializer()
{
ApiKey=谷歌钥匙
});
//新的翻译服务{Key=googlekey};
i收集数据=新收集();
字符串[]srcText=新[]{Text};
TranslationListResponse=service.Translations.List(srcText,tragetlan.Fetch();
var translations=新列表();
//我们需要更改此代码。。。
//目前该代码
foreach(Google.api.Translate.v2.Data.translationResource translation in response.Translations)
{
translations.Add(translation.TranslatedText);
}
返回翻译[0];
}
捕获(例外情况除外)
{
返回文本;
}
}
上述函数对我来说运行良好,但对于某些值,此函数通过异常表示:

未配置Google.api.Requests.RequestError访问[403] 远程服务器返回错误:(403)禁止

此异常以随机方式发生,这意味着对于同一个句子(值),它在所有语言中都能正确翻译,但通过一种或两种语言的异常。此问题在8-12次请求后发生。 注意:我的输入值的字符长度始终小于500个字符,所有大小的句子都会出现此问题(即小的10-20个字符和大的250-400个字符)
我不知道为什么谷歌API会这样

通过增加字符/秒/用户限制来增加Google Translator API的配额


调用API的次数是否有限制?你有可能达到这个极限吗?不,我没有达到极限。若我碰巧达到了API的限制,那个么也不会翻译我最后请求的文本。但是我的代码从资源文件的开始到结束转换所有的值。此问题仅在少数文本中随机出现。转到此页的步骤:1。登录谷歌2。转到url:3。点击配额4。将翻译API报价增加至100000