public async Task <TResponse> SendAsync <TResponse>(IRequest <TResponse> request, CancellationToken cancellationToken = default) { using HttpRequestMessage message = new HttpRequestMessage { Method = request.Method }; List <KeyValuePair <string, object> > keyValuePairs = null; switch (request) { case CircularSearchRequest circularSearchRequest: keyValuePairs = circularSearchRequest.GetPropertiesKeyValuePairs(); break; case PriceRequest priceRequest: keyValuePairs = priceRequest.GetPropertyKeyValuePair(); break; } if (keyValuePairs is null || !keyValuePairs.Any()) { throw new Exception("KeyValuePairs cannot be empty"); } message.RequestUri = _baseUri.AddEndpointWithParameters(request.EndpointUrl, keyValuePairs).AddApiKey("apikey", _apiKey); HttpResponseMessage result = await _client.SendAsync(message, cancellationToken); var content = await result.Content.ReadAsStringAsync(cancellationToken); return(JsonConvert.DeserializeObject <TResponse>(content, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore })); }