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}"); } }
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}"); } }