private Task<Stream> MakeRequest(string uri, AdmAccessToken authToken)
        {
            var task = new TaskCompletionSource<Stream>();

            if (authToken == null)
            {
                task.SetException(new TranslationException(new NullReferenceException("authToken")));
                return task.Task;
            }

            var httpWebRequest = (HttpWebRequest)WebRequest.Create(uri);
            httpWebRequest.Headers["Authorization"] = "Bearer " + authToken.access_token;

            IAsyncResult ar = null;
            ar = httpWebRequest.BeginGetResponse(delegate
                                                 {
                                                     try
                                                     {
                                                         Stream stream = httpWebRequest.EndGetResponse(ar).GetResponseStream();
                                                         task.SetResult(stream);
                                                     }
                                                     catch (Exception e)
                                                     {
                                                         task.SetException(new TranslationException(e));
                                                     }
                                                     
                                                 }, null);

            return task.Task;
        }
Beispiel #2
0
        public async Task <List <string> > GetLanguages()
        {
            AdmAccessToken authToken = await GetAccessToken();

            string uri = string.Format("http://api.microsofttranslator.com/V2/Http.svc/GetLanguagesForTranslate");

            using (Stream stream = await MakeRequest(uri, authToken))
            {
                var serializer       = new DataContractSerializer(typeof(string[]));
                var translationLangs = (string[])serializer.ReadObject(stream);

                return(translationLangs.ToList());
            }
        }
Beispiel #3
0
        public async Task <string> Translate(string text, string toLang)
        {
            AdmAccessToken authToken = await GetAccessToken();

            string uri = string.Format("http://api.microsofttranslator.com/v2/Http.svc/Translate?text={0}&to={1}&contentType={2}", text, toLang, "text/plain");

            using (Stream stream = await MakeRequest(uri, authToken))
            {
                var serializer  = new DataContractSerializer(typeof(String));
                var translation = (string)serializer.ReadObject(stream);

                return(translation);
            }
        }
 private async void OnTokenExpiredCallback(object stateInfo)
 {
     try
     {
         await RequestNewToken();
     }
     catch (Exception ex)
     {
         _token = null;
     }
     finally
     {
         _renewTimer.Change(TimeSpan.FromMinutes(RefreshTokenDuration), TimeSpan.FromMilliseconds(-1));
     }
 }
 private async void OnTokenExpiredCallback(object stateInfo)
 {
     try
     {
         await RequestNewToken();
     }
     catch (Exception ex)
     {
         _token = null;
     }
     finally
     {
         _renewTimer.Change(TimeSpan.FromMinutes(RefreshTokenDuration), TimeSpan.FromMilliseconds(-1));
     }
 }
        private async Task RequestNewToken()
        {
            const string datamarketAccessUri = "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13";

            var requestData = string.Format("grant_type=client_credentials&client_id={0}&client_secret={1}&scope=http://api.microsofttranslator.com",
                                            HttpUtility.UrlEncode(_clientId),
                                            HttpUtility.UrlEncode(_clientSecret));

            byte[] bytes = Encoding.UTF8.GetBytes(requestData);

            var http    = new HttpClient();
            var content = new ByteArrayContent(bytes);

            HttpResponseMessage response = await http.PostAsync(datamarketAccessUri, content);

            using (Stream responseStream = await response.Content.ReadAsStreamAsync())
            {
                var serializer = new DataContractJsonSerializer(typeof(AdmAccessToken));

                _token = (AdmAccessToken)serializer.ReadObject(responseStream);

                _lastTokenTimestamp = DateTime.Now;
            }
        }
        private async Task RequestNewToken()
        {
            const string datamarketAccessUri = "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13";

            var requestData = string.Format("grant_type=client_credentials&client_id={0}&client_secret={1}&scope=http://api.microsofttranslator.com", 
                HttpUtility.UrlEncode(_clientId),
                HttpUtility.UrlEncode(_clientSecret));

            byte[] bytes = Encoding.UTF8.GetBytes(requestData);
            
            var http = new HttpClient();
            var content = new ByteArrayContent(bytes);

            HttpResponseMessage response = await http.PostAsync(datamarketAccessUri, content);

            using (Stream responseStream = await response.Content.ReadAsStreamAsync())
            {
                var serializer = new DataContractJsonSerializer(typeof (AdmAccessToken));
                
                _token = (AdmAccessToken)serializer.ReadObject(responseStream);

                _lastTokenTimestamp = DateTime.Now;
            }
        }