Variable: private IRestRequest _restRequest; ------------------------------------- Constructor: public RefinitivRepository(IOptions refinitivConfig, IRestClient restClient, IRestRequest restRequest, IOptions storageConfig, IMemoryCache cache, ILogger logger) { _refinitivConfig = refinitivConfig; _restClient = restClient; _storageConfig = storageConfig; _cache = cache; _logger = logger; restRequest.AddHeader("Prefer", "respond-async, wait=120"); restRequest.AddHeader("Content-Type", "application/json"); restRequest.Timeout = 300000; _restRequest = restRequest; fieldNames = new string[] { "Base Currency Code", "Universal Close Price", "Trade Date"}; dailyJobFieldNames = new string[] { "Trade Date", "Base Currency Code", "Currency Code", "Universal Close Price", "FXIR Scaling Factor" }; } ------------------------------------------ public async Task GetInstrumentListExchangeRates(string authToken) { _logger.LogInformation("Start of GetInstrumentListExchangeRates in RefinitivRepository"); IRestResponse instrumentListResponse = null; try { string restRequest = PrepareDSSDailyJobCurrencyExchangeRequest(authToken); Parameter dailyJobParameter = new Parameter("FxDailyJobParameter", restRequest, ParameterType.RequestBody); _restRequest.AddParameter(dailyJobParameter); instrumentListResponse = await _restClient.ExecutePostTaskAsync(_restRequest); if (instrumentListResponse != null && !string.IsNullOrWhiteSpace(instrumentListResponse.Content) && instrumentListResponse.StatusCode == HttpStatusCode.OK) { _logger.LogInformation("RefinitivRepository-GetInstrumentListExchangeRates: DSS response received in the initial request"); return instrumentListResponse; } else if (instrumentListResponse != null && instrumentListResponse.Headers != null && instrumentListResponse.Headers.Count > 0) { object locationHeaderValue = instrumentListResponse.Headers.FirstOrDefault(h => h.Name == "Location")?.Value; _logger.LogInformation("RefinitivRepository-GetInstrumentListExchangeRates: Use locationheadervalue to get DSS response and the header value is: " + locationHeaderValue.ToString()); if (locationHeaderValue != null) { _logger.LogInformation("RefinitivRepository-GetInstrumentListExchangeRates: Start of calling GetDailyJobExtractionResponse"); instrumentListResponse = await GetDailyJobExtractionResponse(locationHeaderValue.ToString(), authToken); } } } catch (Exception ex) { _logger.LogError(ex, "Error occured in GetInstrumentListExchangeRates in RefinitivRepository"); throw ex; } _logger.LogInformation("End of GetInstrumentListExchangeRates in RefinitivRepository"); return instrumentListResponse; } ------------------------------------------------ private string PrepareDSSDailyJobCurrencyExchangeRequest(string authToken) { string dailyJobExchangeRequest = string.Empty; try { _restRequest.Parameters.RemoveAll(R => R.Name == "Authorization" || R.Name == "AuthenticationParameter" || R.Name == "EODParameter" || R.Name == "SingleDayParameter" || R.Name == "MonthParameter" || R.Name == "YearParameter" || R.Name == "MultiCurrencyParameter" || R.Name == "FxDailyJobParameter"); _restRequest.AddHeader("Authorization", $"Token {authToken}"); _restClient.BaseUrl = new Uri($"{_refinitivConfig.Value.ServiceUrl}Extractions/ExtractWithNotes"); Identifier identifier = new Identifier(); identifier.OdataType = "#ThomsonReuters.Dss.Api.Extractions.ExtractionRequests.InstrumentListIdentifierList"; identifier.InstrumentListId = _refinitivConfig.Value.InstrumentListId; DSSDailyJobCurrencyExchangeRequest dailyJobRequest = new DSSDailyJobCurrencyExchangeRequest { ExtractionRequest = new ExtractRequest { OdataType = "#ThomsonReuters.Dss.Api.Extractions.ExtractionRequests.EndOfDayPricingExtractionRequest", Condition = null, ContentFieldNames = dailyJobFieldNames.ToList(), IdentifierList = identifier } }; dailyJobExchangeRequest = JsonSerializer.Serialize(dailyJobRequest); } catch (Exception ex) { throw ex; } return dailyJobExchangeRequest; } ---------------------------------------------------------- private async Task GetDailyJobExtractionResponse(string baseUrl, string authToken) { _logger.LogInformation("Start of GetDailyJobExtractionResponse in RefinitivRepository"); IRestResponse restResponse; try { _restRequest.Parameters.RemoveAll(R => R.Name == "Authorization" || R.Name == "AuthenticationParameter" || R.Name == "EODParameter" || R.Name == "SingleDayParameter" || R.Name == "MonthParameter" || R.Name == "YearParameter" || R.Name == "MultiCurrencyParameter" || R.Name == "FxDailyJobParameter"); _restRequest.AddHeader("Authorization", $"Token {authToken}"); _restClient.BaseUrl = new Uri(baseUrl); restResponse = await _restClient.ExecuteGetTaskAsync(_restRequest); } catch (Exception ex) { _logger.LogError(ex, "Error occured in GetDailyJobExtractionResponse in RefinitivRepository"); throw ex; } _logger.LogInformation("End of GetDailyJobExtractionResponse in RefinitivRepository"); return restResponse; } --------------------------------------