Esempio n. 1
0
        public async Task <QueryResult> FetchAsync(
            HttpQueryRequest request,
            HttpClient httpClient,
            IEnumerable <IHttpQueryRequestInterceptor> interceptors)
        {
            (string json, HttpResponseMessage message)result =
                await FetchStringAsync(request, httpClient)
                .ConfigureAwait(false);

            QueryResult queryResult = HttpResponseDeserializer.Deserialize(
                JsonConvert.DeserializeObject <JObject>(
                    result.json, _jsonSettings));

            if (interceptors != null)
            {
                foreach (IHttpQueryRequestInterceptor interceptor in
                         interceptors)
                {
                    await interceptor.OnResponseReceivedAsync(
                        request, result.message, queryResult)
                    .ConfigureAwait(false);
                }
            }

            return(queryResult);
        }
Esempio n. 2
0
        public async Task <QueryResult> FetchAsync(
            HttpQueryRequest request,
            HttpClient httpClient)
        {
            string result = await FetchStringAsync(request, httpClient)
                            .ConfigureAwait(false);

            return(HttpResponseDeserializer.Deserialize(
                       JsonConvert.DeserializeObject <JObject>(result, _jsonSettings)));
        }
Esempio n. 3
0
        private async Task <string> FetchStringInternalAsync(
            HttpQueryRequest request,
            HttpClient httpClient)
        {
            var content = new StringContent(
                SerializeRemoteRequest(request),
                Encoding.UTF8,
                _json);

            HttpResponseMessage response =
                await httpClient.PostAsync(default(Uri), content)
                .ConfigureAwait(false);

            return(await response.Content.ReadAsStringAsync()
                   .ConfigureAwait(false));
        }
Esempio n. 4
0
        public Task <string> FetchStringAsync(
            HttpQueryRequest request,
            HttpClient httpClient)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            if (httpClient == null)
            {
                throw new ArgumentNullException(nameof(httpClient));
            }

            return(FetchStringInternalAsync(request, httpClient));
        }
Esempio n. 5
0
        private async Task <HttpResponseMessage> FetchInternalAsync(
            HttpQueryRequest request,
            HttpClient httpClient)
        {
            var content = new StringContent(
                SerializeRemoteRequest(request),
                Encoding.UTF8,
                _json);

            HttpResponseMessage response =
                await httpClient.PostAsync(default(Uri), content)
                .ConfigureAwait(false);

            response.EnsureSuccessStatusCode();

            return(response);
        }
Esempio n. 6
0
        public async Task <QueryResult> FetchAsync(
            HttpQueryRequest request,
            HttpClient httpClient,
            IEnumerable <IHttpQueryRequestInterceptor> interceptors,
            CancellationToken cancellationToken)
        {
            HttpResponseMessage message =
                await FetchInternalAsync(request, httpClient)
                .ConfigureAwait(false);

            using (Stream stream = await message.Content.ReadAsStreamAsync()
                                   .ConfigureAwait(false))
            {
                object response = await BufferHelper.ReadAsync(
                    stream,
                    (buffer, bytesBuffered) =>
                    ParseJson(buffer, bytesBuffered),
                    cancellationToken)
                                  .ConfigureAwait(false);

                QueryResult queryResult =
                    response is IReadOnlyDictionary <string, object> d
                        ? HttpResponseDeserializer.Deserialize(d)
                        : QueryResult.CreateError(
                        ErrorBuilder.New()
                        .SetMessage(
                            "Could not deserialize query response.")
                        .Build());

                if (interceptors != null)
                {
                    foreach (IHttpQueryRequestInterceptor interceptor in
                             interceptors)
                    {
                        await interceptor.OnResponseReceivedAsync(
                            request, message, queryResult)
                        .ConfigureAwait(false);
                    }
                }

                return(queryResult);
            }
        }
Esempio n. 7
0
        private async Task <(string, HttpResponseMessage)> FetchStringInternalAsync(
            HttpQueryRequest request,
            HttpClient httpClient)
        {
            var content = new StringContent(
                SerializeRemoteRequest(request),
                Encoding.UTF8,
                _json);

            HttpResponseMessage response =
                await httpClient.PostAsync(httpClient.BaseAddress, content)
                .ConfigureAwait(false);

            response.EnsureSuccessStatusCode();

            string json = await response.Content.ReadAsStringAsync()
                          .ConfigureAwait(false);

            return(json, response);
        }
Esempio n. 8
0
 private string SerializeRemoteRequest(
     HttpQueryRequest remoteRequest)
 {
     return(JsonConvert.SerializeObject(
                remoteRequest, _jsonSettings));
 }