Esempio n. 1
0
        private async Task <List <Rate> > GetUsdRatesForDateAsync(DateTime date)
        {
            var dateKey = GetDateKey(date.Year, date.Month, date.Day);

            if (_usdRatesCache.ContainsKey(dateKey))
            {
                return(_usdRatesCache[dateKey]);
            }

            string dateString = date.ToString("yyyy-MM-dd");
            string url        = $"{OxrApiRoot.TrimEnd('/')}/historical/{dateString}.json?app_id={ApplicationId}";
            var    request    = new HttpRequestMessage(HttpMethod.Get, url);

            HttpResponseMessage response;

            try
            {
                response = await _httpClient.SendAsync(request);
            }
            catch (Exception e)
            {
                throw new HttpRequestFailedException(
                          $"OxrCurrencyRatesProvider: HTTP request failed. {e.Message}",
                          e);
            }

            if (response.IsSuccessStatusCode)
            {
                RatesResponse ratesResponse;
                using (var responseStream = await response.Content.ReadAsStreamAsync())
                {
                    JsonReader reader = new JsonTextReader(new StreamReader(responseStream));
                    ratesResponse = (new JsonSerializer()).Deserialize <RatesResponse>(reader);
                }

                var rates = ratesResponse.Rates
                            .Select(x => new Rate {
                    CurrencyCode = x.Key, Value = x.Value
                })
                            .ToList();
                _usdRatesCache[dateKey] = rates;
                return(rates);
            }
            else
            {
                throw new HttpRequestFailedException(
                          response.StatusCode,
                          $"OxrCurrencyRatesProvider: HTTP request failed. {response.ReasonPhrase}");
            }
        }
Esempio n. 2
0
        private async Task LoadCurrencies()
        {
            string url     = $"{OxrApiRoot.TrimEnd('/')}/currencies.json";
            var    request = new HttpRequestMessage(HttpMethod.Get, url);

            HttpResponseMessage response;

            try
            {
                response = await _httpClient.SendAsync(request);
            }
            catch (Exception e)
            {
                throw new HttpRequestFailedException(
                          $"OxrCurrencyRatesProvider: HTTP request failed. {e.Message}",
                          e);
            }

            if (response.IsSuccessStatusCode)
            {
                Dictionary <string, string> currenciesResponse;
                using (var responseStream = await response.Content.ReadAsStreamAsync())
                {
                    JsonReader reader = new JsonTextReader(new StreamReader(responseStream));
                    currenciesResponse = (new JsonSerializer()).Deserialize <Dictionary <string, string> >(reader);
                }

                var currencies = currenciesResponse.Keys.ToList();
                currencies.Sort();
                var curId = 1;
                _currencyCache = new Dictionary <int, Currency>();
                foreach (var code in currencies)
                {
                    _currencyCache.Add(curId, new Currency
                    {
                        Id   = curId,
                        Code = code
                    });
                    curId++;
                }
            }
            else
            {
                throw new HttpRequestFailedException(
                          response.StatusCode,
                          $"OxrCurrencyRatesProvider: HTTP request failed. {response.ReasonPhrase}");
            }
        }