示例#1
0
        public async Task <SearchResult> GetSearchResultAsync(string text)
        {
            var endpoint       = string.Format(_config.Value.SearchEndpointFormat, _config.Value.Uri, text);
            var responseString = await _httpClientWrapper.GetAsync(endpoint);

            return(JsonConvert.DeserializeObject <SearchResult>(responseString));
        }
        private async Task <TResult> getFromServerAndUnwrap <TResult>(string path)
            where TResult : IEVEXmlResult
        {
            var url      = buildUri(path);
            var response = await _httpClient.GetAsync <ResponseWrapper <TResult> >(url);

            return(response.Result);
        }
示例#3
0
        public async Task <IList <Product> > GetProducts()
        {
            var response = await _httpClient.GetAsync("https://localhost:44395/api/products");

            var result = await response.Content.ReadAsStringAsync();

            return(JsonConvert.DeserializeObject <IList <Product> >(result));
        }
示例#4
0
        public async Task GetProducts_ShouldReturnPriceInLowToHighOrder()
        {
            _httpClientWrapper.GetAsync <List <Product> >(Arg.Any <string>())
            .Returns(Task.FromResult(_products));

            var service = new ProductService(_shopperHistoryService, _connectionSettings, _httpClientWrapper);

            var result = await service.GetProducts("low");

            Assert.AreEqual(_products.OrderBy(p => p.Price), result);
        }
示例#5
0
        public async Task <PaystackBaseResponse <ResolveAccountResponse> > ResolveAccountNumber(string accountNumber, string bankCode)
        {
            var token   = _externalAuthService.GetPaystackToken();
            var headers = new Dictionary <string, string> {
                { "Authorization", $"Bearer {token}" }
            };
            var response = await _httpClient.GetAsync <PaystackBaseResponse <ResolveAccountResponse> >
                               ($"{_paystackSettings.BaseUrl}{_paystackSettings.ResolveAccountUrl}?account_number={accountNumber}&bank_code={bankCode}", headers);

            return(response);
        }
示例#6
0
        public async Task <LocationIqReverseResponse> GetLocationDetailsAsync(string postcode)
        {
            string searchTerm = postcode.IsPostcode() ? postcode.SplitPostcode() : postcode;

            string forwardSearchResult = await _httpClient.GetAsync($"https://eu1.locationiq.com/v1/search.php?key={_locationIqApiKey}&q={searchTerm}&countrycodes=gb&format=json");

            List <LocationIqForwardResponse> locationIqForwardResponse = JsonConvert.DeserializeObject <List <LocationIqForwardResponse> >(forwardSearchResult);

            string reverseLookupResult = await _httpClient.GetAsync($"https://eu1.locationiq.com/v1/reverse.php?key={_locationIqApiKey}&lat={locationIqForwardResponse[0].Latitude}&lon={locationIqForwardResponse[0].Longitude}&countrycodes=gb&format=json");

            return(JsonConvert.DeserializeObject <LocationIqReverseResponse>(reverseLookupResult));
        }
        public async Task <Entry <dynamic> > GetEntryAsync(string entryId)
        {
            Entry <dynamic> entry;
            string          requestUri = $"spaces/{this.space}/entries/{entryId}";

            using (HttpResponseMessage response = await httpClient.GetAsync(requestUri))
                using (HttpContent content = response.Content)
                {
                    string result = await content.ReadAsStringAsync();

                    entry = await Task.Factory.StartNew <Entry <dynamic> >(() => JsonConvert.DeserializeObject <Entry <dynamic> >(result));
                }

            return(entry);
        }
示例#8
0
        public async Task <DocumentToDownload> GetSecureDocument(string assetId, string groupSlug)
        {
            try
            {
                var document = await _documentsRepository.GetSecureDocument(assetId, groupSlug);

                if (document == null)
                {
                    _logger.LogWarning($"No document was returned for assetId: {assetId}");
                    return(null);
                }

                var result = await _httpClient.GetAsync($"https:{document.Url}");

                return(new DocumentToDownload
                {
                    FileData = await result.Content.ReadAsByteArrayAsync(),
                    MediaType = document.MediaType
                });
            }
            catch (Exception ex)
            {
                _logger.LogError(new EventId(0), ex, $"There was a problem getting document with assetId: {assetId} for group {groupSlug}");
                return(null);
            }
        }
示例#9
0
        public async Task <string> SearchAsync(SearchRequest searchRequest)
        {
            if (searchRequest == null)
            {
                throw new ArgumentNullException(nameof(searchRequest));
            }

            var queryParameters = new Dictionary <string, string>
            {
                { ZwsIdParamName, _zillowServiceSettings.ZwsId },
                { AddressParamName, searchRequest.AddressLine },
                { CityStateZipParamName, GetCityStateZipQueryStringParameter(searchRequest) },
                { ZestimateRentParamName, searchRequest.ZestimateRent.ToString() },
            };

            var url = QueryHelpers.AddQueryString(_zillowServiceSettings.SearchServiceUrl, queryParameters);

            var response = await _httpClient.GetAsync(new Uri(url));

            try
            {
                response.EnsureSuccessStatusCode();
                return(await response.Content.ReadAsStringAsync());
            }
            catch (Exception exception)
            {
                _logger.LogError(SearchEvents.HttpRequestFailed, exception, "Http Request failed");
                throw;
            }
        }
示例#10
0
        /// <summary>
        /// Geocodes an address using the Bing Maps Locations API
        /// </summary>
        /// <param name="address">Input address</param>
        /// <param name="city">Input city</param>
        /// <param name="stateProvince">Input state or province</param>
        /// <param name="postalCode">Input postal code</param>
        /// <param name="country">Input country</param>
        /// <returns>IList&lt;SingleAddressResponse&gt;</returns>
        public async Task <IList <SingleAddressGeocodeResponse> > GeocodeAddressAsync(
            string address       = null,
            string city          = null,
            string stateProvince = null,
            string postalCode    = null,
            string country       = null
            )
        {
            _ = Uri.TryCreate(new Uri(BingOptions.ApiRootUrl), BingOptions.GeocodeSingleAddressEndpoint, out Uri apiUri);

            var uriBuilder = new UriBuilder(apiUri);

            var requestParams = GetDefaultBingParams();

            requestParams.AddIfNotNull("addressLine", address);
            requestParams.AddIfNotNull("locality", city);
            requestParams.AddIfNotNull("adminDistrict", stateProvince);
            requestParams.AddIfNotNull("postalCode", postalCode);
            requestParams.AddIfNotNull("countryRegion", country);

            uriBuilder.Query = requestParams.ToString();

            HttpResponseMessage responseMessage = await HttpClientWrapper.GetAsync(uriBuilder.Uri).ConfigureAwait(false);

            var responseBody = await responseMessage.Content.ReadAsStringAsync().ConfigureAwait(false);

            var responseObject = JsonConvert.DeserializeObject <LocationResponse>(responseBody);

            return(TranslateBingLocationResponse(responseObject));
        }
示例#11
0
        public string GetSummary()
        {
            var url    = "http://google.com";
            var result = _HttpClient.GetAsync("https://google.com").Result;

            return($"<p><a href=\"{url}\" target=\"_blank\" >{url}</a> status: {result.StatusCode}</p>");
        }
    public Nasa Fetch()
    {
        var response = _client.GetAsync(NasaUrl).Result;
        var data     = response.Content.ReadAsStringAsync().Result;

        return(JsonConvert.DeserializeObject <Nasa>(data));
    }
        public async System.Threading.Tasks.Task GetFilterParameters_CallsApi()
        {
            // arrange
            string endpoint = "endPoint";

            configuration[EndPoints.Api.GetFilterParameters].Returns(endpoint);
            FilterParametersDto parameters = new FilterParametersDto()
            {
                Countries       = new List <CountryDto>(),
                ItemTypes       = new List <ItemTypeDto>(),
                OrderPriorities = new List <OrderPriorityDto>(),
                Regions         = new List <RegionDto>(),
                SalesChannels   = new List <SalesChannelDto>()
            };
            GetSalesRequestDto requestDto = GetSalesRequestDtoBuilder.Build();

            httpClient.GetAsync <FilterParametersDto>(endpoint).Returns(parameters);


            // act
            await saleService.GetFilterParameters(requestDto);

            // assert
            await httpClient.Received(1).GetAsync <FilterParametersDto>(endpoint);
        }
示例#14
0
        public async Task <BookFindResponse> FindBookByIsbnAsync(string isbn)
        {
            var query = HttpUtility.ParseQueryString(string.Empty);

            query["bibkeys"] = $"ISBN:{isbn}";
            query["jscmd"]   = "data";
            query["format"]  = "json";
            var queryString = "?" + query.ToString();
            var response    = await httpClientWrapper.GetAsync(queryString);

            var responseObject = JsonConvert.DeserializeObject <JObject>(await response.Content.ReadAsStringAsync());

            BookFindResponse result = null;

            if (responseObject.ToString() != "{}")
            {
                var dict = responseObject.ToObject <Dictionary <string, JObject> >();
                var val  = dict.First().Value;
                result = new BookFindResponse
                {
                    Author = val["authors"][0]["name"].ToString(),
                    Isbn   = isbn,
                    Title  = val["title"].ToString(),
                    Genres = new List <string>()
                };

                if (val["subjects"] != null)
                {
                    result.Genres = val["subjects"].Select(x => x["name"].ToString());
                }
            }

            return(result);
        }
        public async Task <GetJobDetailsResponse> GetJobDetailsAsync(int jobID)
        {
            string path         = $"/api/GetJobDetails?userID=-1&jobID=" + jobID;
            string absolutePath = $"{path}";

            using (HttpResponseMessage response = await _httpClientWrapper.GetAsync(HttpClientConfigName.RequestService, absolutePath, CancellationToken.None).ConfigureAwait(false))
            {
                string jsonResponse = await response.Content.ReadAsStringAsync();

                var getJobDetailsResponse = JsonConvert.DeserializeObject <ResponseWrapper <GetJobDetailsResponse, CommunicationServiceErrorCode> >(jsonResponse);
                if (getJobDetailsResponse.HasContent && getJobDetailsResponse.IsSuccessful)
                {
                    return(getJobDetailsResponse.Content);
                }
                return(null);
            }
        }
示例#16
0
        public async Task <SearchDiagnosticResponse> GetSearchDiagnosticResponseAsync(
            Instance instance,
            CancellationToken token)
        {
            try
            {
                using (var diagResponse = await _httpClient.GetAsync(
                           instance.DiagUrl,
                           HttpCompletionOption.ResponseContentRead,
                           token))
                {
                    if (!diagResponse.IsSuccessStatusCode)
                    {
                        throw new HttpResponseException(
                                  diagResponse.StatusCode,
                                  diagResponse.ReasonPhrase,
                                  $"The HTTP response when hitting {instance.DiagUrl} was {(int)diagResponse.StatusCode} " +
                                  $"{diagResponse.ReasonPhrase}, which is not successful.");
                    }

                    var diagContent         = diagResponse.Content;
                    var searchDiagResultRaw = await diagContent.ReadAsStringAsync();

                    SearchDiagnosticResponse response = null;
                    switch (instance.ServiceType)
                    {
                    case ServiceType.AzureSearch:
                        var tempResponse = JsonConvert.DeserializeObject <AzureSearchDiagnosticResponse>(searchDiagResultRaw);
                        response = ConvertAzureSearchResponse(tempResponse);
                        break;
                    }

                    return(response);
                }
            }
            catch (JsonException je)
            {
                _logger.LogError("Error: Failed to deserialize response from diagnostic endpoint: {Error}", je.Message);
                throw je;
            }
            catch (Exception e)
            {
                _logger.LogError("Error: Failed to get diagnostic response due to unexpected error: {Error}", e.Message);
                throw e;
            }
        }
        public async Task <ConvertedCurrencyValue> ConvertCurrencyAsync(PriceConversionRequest priceConversionRequest)
        {
            if (priceConversionRequest == null)
            {
                throw new ArgumentNullException("Price Conversion request is null");
            }
            await _priceConversionRequestValidator.ValidateAndThrowAsync(priceConversionRequest);

            var exchangeRateApiUrlSection = _configuration.GetSection("ExchangeRateApiUrl");

            if (string.IsNullOrEmpty(exchangeRateApiUrlSection?.Value))
            {
                var error = "Exchange rates API not configured";
                _logger.LogError(error);
                throw new Exception(error);
            }
            var exchangeRateApiUrl = $"{exchangeRateApiUrlSection.Value}/{priceConversionRequest.SourceCurrency}.json";
            var cancellationToken  = new CancellationTokenSource().Token;
            var response           = await _clientWrapper.GetAsync <ExchangeRatesResponse>(exchangeRateApiUrl, cancellationToken).ConfigureAwait(false);

            if (!response.Success || response.Data?.Rates == null)
            {
                return(null);
            }
            var    rates = response.Data.Rates;
            double convertedPrice;

            switch (priceConversionRequest.TargetCurrency.ToUpper())
            {
            case "USD":
                convertedPrice = priceConversionRequest.Price * rates.USD;
                break;

            case "EUR":
                convertedPrice = priceConversionRequest.Price * rates.EUR;
                break;

            case "GBP":
                convertedPrice = priceConversionRequest.Price * rates.GBP;
                break;

            default: return(null);
            }

            if (DateTime.TryParse(response.Data.Date, out var lastUpdated))
            {
                var time = new TimeSpan(response.Data.TimeLastUpdated);
                lastUpdated = lastUpdated.Add(time);
            }
            return(new ConvertedCurrencyValue
            {
                NewPrice = convertedPrice,
                ConvertedFromCurrency = priceConversionRequest.SourceCurrency,
                ConvertedToCurrency = priceConversionRequest.TargetCurrency,
                LastUpdated = lastUpdated
            });
        }
        public async Task <List <RepoInformation> > GetRepoList(string searchUserName)
        {
            var uri = new Uri(GITHUBAPI + searchUserName + "/repos");
            var httpRequestMessage       = new HttpRequestMessage();
            List <RepoInformation> repos = null;

            try
            {
                var responseMessage = await _wrapper.GetAsync(uri, httpRequestMessage).ConfigureAwait(false);

                repos = JsonConvert.DeserializeObject <List <RepoInformation> >(responseMessage.ToString());
            }
            catch
            {
            }

            return(repos);
        }
示例#19
0
        /// <summary>
        /// Makes a get request to a URL and handles the result from Contentful
        /// </summary>
        /// <param name="url">The URL to send the request to</param>
        /// <param name="cancellationToken">The cancellation token for the request</param>
        /// <returns>A HttpResponseMessage with the success status code & content</returns>
        /// <exception cref="ContentfulException">Thrown if the request to Contentful returned a status code other than 200 (OK)</exception>
        internal async Task <HttpResponseMessage> MakeGetRequestAsync(string url, CancellationToken cancellationToken)
        {
            var result = await HttpClient.GetAsync(url, cancellationToken);

            if (result.IsSuccessStatusCode)
            {
                return(result);
            }
            throw new ContentfulException((int)result.StatusCode, await result.Content.ReadAsStringAsync());
        }
示例#20
0
        public async Task <IEnumerable <Contact> > GetContactsAsync(string url)
        {
            var response = await _httpClient.GetAsync(url);

            response.EnsureSuccessStatusCode();

            var json = await response.Content.ReadAsStringAsync();

            return(JsonConvert.DeserializeObject <IEnumerable <Contact> >(json));
        }
示例#21
0
        public async Task <PostCodeIoNearestRootResponse> GetNearbyPostCodesAsync(string postcode, CancellationToken cancellationToken)
        {
            string path = $"postcodes/{postcode}/nearest";
            // 804.672km = 0.5 miles
            string query        = "limit=100&radius=805";
            string absolutePath = $"{path}?{query}";

            PostCodeIoNearestRootResponse postCodeIoNearestRootResponse;

            using (HttpResponseMessage response = await _httpClientWrapper.GetAsync(HttpClientConfigName.PostcodeIo, absolutePath, cancellationToken).ConfigureAwait(false))
            {
                response.EnsureSuccessStatusCode();
                Stream stream = await response.Content.ReadAsStreamAsync();

                postCodeIoNearestRootResponse = stream.ReadAndDeserializeFromJson <PostCodeIoNearestRootResponse>();
            }

            return(postCodeIoNearestRootResponse);
        }
示例#22
0
        static void Main(string[] args)
        {
            _serviceWrapper = new HttpClientWrapper(new System.Net.Http.HttpClient());

            var location = _serviceWrapper.GetAsync <Location>("https://www.metaweather.com/api/location/862592/").Result;

            Console.WriteLine($"{location.Title} - {location.Time}");

            Console.ReadLine();
        }
        private async Task <string> GetJsonBlobAsync(string requestUrl)
        {
            var response = await httpClient.GetAsync(requestUrl);

            if (!response.IsSuccessStatusCode)
            {
                throw new InvalidOperationException("Unable to retrieve content from api");
            }

            return(await response.Content.ReadAsStringAsync());
        }
示例#24
0
        public async Task <int> GetChampionCountByPostcode(string postcode, CancellationToken cancellationToken)
        {
            string path = $"api/GetChampionCountByPostcode?postcode={postcode}";

            using (HttpResponseMessage response = await _httpClientWrapper.GetAsync(HttpClientConfigName.UserService, path, cancellationToken).ConfigureAwait(false))
            {
                string jsonResponse = await response.Content.ReadAsStringAsync();

                var getChampionCountByPostcodeResponse = JsonConvert.DeserializeObject <ResponseWrapper <GetChampionCountByPostcodeResponse, UserServiceErrorCode> >(jsonResponse);

                if (getChampionCountByPostcodeResponse.HasContent && getChampionCountByPostcodeResponse.IsSuccessful)
                {
                    return(getChampionCountByPostcodeResponse.Content.Count);
                }
                else
                {
                    throw new System.Exception(getChampionCountByPostcodeResponse.Errors.ToString());
                }
            }
        }
示例#25
0
        private TResponse GetResponse <TResponse>(string queryString)
        {
            var url = BuildHttpClientUrl(
                GatewayHost,
                GatewayApiPath,
                GatewayPort,
                queryString);

            return(Send <TResponse>(async() => await _client
                                    .GetAsync(url)));
        }
        public async Task <GetUsersResponse> GetUsers()
        {
            string path = $"api/GetUsers";

            using (HttpResponseMessage response = await _httpClientWrapper.GetAsync(HttpClientConfigName.UserService, path, CancellationToken.None).ConfigureAwait(false))
            {
                string jsonResponse = await response.Content.ReadAsStringAsync();

                var usersResponse = JsonConvert.DeserializeObject <ResponseWrapper <GetUsersResponse, UserServiceErrorCode> >(jsonResponse);

                if (usersResponse.HasContent && usersResponse.IsSuccessful)
                {
                    return(usersResponse.Content);
                }
                else
                {
                    throw new System.Exception(usersResponse.Errors.ToString());
                }
            }
        }
示例#27
0
        public async Task <GetGroupCredentialsResponse> GetGroupCredentials(int groupId)
        {
            string path         = $"/api/GetGroupCredentials?groupID=" + groupId;
            string absolutePath = $"{path}";

            using (HttpResponseMessage response = await _httpClientWrapper.GetAsync(HttpClientConfigName.GroupService, absolutePath, CancellationToken.None).ConfigureAwait(false))
            {
                string jsonResponse = await response.Content.ReadAsStringAsync();

                var getJobsResponse = JsonConvert.DeserializeObject <ResponseWrapper <GetGroupCredentialsResponse, GroupServiceErrorCode> >(jsonResponse);
                if (getJobsResponse.HasContent && getJobsResponse.IsSuccessful)
                {
                    return(getJobsResponse.Content);
                }
                return(null);
            }
        }
示例#28
0
        public async Task <string> GetContent(string criteria, int numberOfResults = 100)
        {
            var googleUrl = $"https://www.google.com.au/search?num={numberOfResults}&q={criteria.GetQueryStringFriendlyParameters()}";
            var response  = await _httpClientWrapper.GetAsync(googleUrl);

            if (response.IsSuccessStatusCode)
            {
                return(await response.Content.ReadAsStringAsync());
            }

            return(null);
        }
        private async Task <History> GetHistory(DateTime startDate, DateTime endDate, string baseCurrency, string targetCurrency)
        {
            string response = await _httpClientWrapper.GetAsync($"https://api.exchangeratesapi.io/history?" +
                                                                $"start_at={startDate:yyyy-MM-dd}" +
                                                                $"&end_at={endDate:yyyy-MM-dd}" +
                                                                $"&symbols={targetCurrency}" +
                                                                $"&base={baseCurrency}");

            History history = await GetResponse <History>(response);

            return(history);
        }
示例#30
0
        private async Task <T> GetImposterAsync <T>(int port, CancellationToken cancellationToken = default)
        {
            using (var response = await _httpClient.GetAsync($"{ImpostersResource}/{port}", cancellationToken).ConfigureAwait(false))
            {
                await HandleResponse(response, HttpStatusCode.OK, $"Failed to retrieve imposter with port {port}",
                                     (message) => new ImposterNotFoundException(message)).ConfigureAwait(false);

                var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                return(JsonConvert.DeserializeObject <T>(content));
            }
        }