public async Task <IResult <IProviderSearchResult> > GetProviderByPRNAsync(IProviderSearchCriteria criteria) { Throw.IfNull(criteria, nameof(criteria)); _logger.LogMethodEnter(); try { _logger.LogInformationObject("Provider search criteria.", criteria); _logger.LogInformationObject("Provider search URI", _getProviderByPRNUri); var content = new StringContent(criteria.ToJson(), Encoding.UTF8, "application/json"); var response = await _httpClient.GetAsync(_getProviderByPRNUri + criteria.Search); _logger.LogHttpResponseMessage("Provider search service http response", response); if (response.IsSuccessStatusCode) { var json = await response.Content.ReadAsStringAsync(); if (!json.StartsWith("[")) { json = "[" + json + "]"; } _logger.LogInformationObject("Provider search service json response", json); var providers = JsonConvert.DeserializeObject <IEnumerable <Provider> >(json); var searchResult = new ProviderSearchResult(providers) { Value = providers }; return(Result.Ok <IProviderSearchResult>(searchResult)); } else { return(Result.Fail <IProviderSearchResult>("Provider search service unsuccessful http response")); } } catch (HttpRequestException hre) { _logger.LogException("Provider search service http request error", hre); return(Result.Fail <IProviderSearchResult>("Provider search service http request error.")); } catch (Exception e) { _logger.LogException("Provider search service unknown error.", e); return(Result.Fail <IProviderSearchResult>("Provider search service unknown error.")); } finally { _logger.LogMethodExit(); } }