示例#1
0
        private async Task <HttpRequestSenderInput> BuildRequestAsync <TInput>(HttpRequestInput <TInput> input, Stream stream)
        {
            var result = BuildRequest(input);

            if (input.Content == null)
            {
                result.Content = new StringContent(string.Empty, Encoding.UTF8, input.ContentType ?? Bolt.FluentHttpClient.Abstracts.Constants.ContentTypeJson);
            }
            else
            {
                var serializer = _serializers.FirstOrDefault(x => x.IsApplicable(input.ContentType));

                await serializer.Serialize(stream, input.Content);

                var content = new StreamContent(stream, 1024);
                content.Headers.ContentLength = stream.Length;
                content.Headers.ContentType   = new System.Net.Http.Headers.MediaTypeHeaderValue(input.ContentType ?? Bolt.FluentHttpClient.Abstracts.Constants.ContentTypeJson)
                {
                    CharSet = Bolt.FluentHttpClient.Abstracts.Constants.ContentCharset
                };

                result.Content = content;
            }

            return(result);
        }
示例#2
0
        public async Task <HttpRequestOutput <TOutput> > SendAsync <TInput, TOutput>(HttpRequestInput <TInput> input, CancellationToken cancellationToken)
        {
            using (var ms = new MemoryStream())
            {
                using (var request = await BuildRequestAsync(input, ms))
                {
                    TOutput output = default(TOutput);

                    request.OnSuccess = (r) =>
                    {
                        var serializer = _serializers.FirstOrDefault(x => x.IsApplicable(r.ContentType));
                        output = serializer.Deserialize <TOutput>(r.ContentStream);

                        return(Task.CompletedTask);
                    };

                    var rsp = await _sender.SendAsync(request, cancellationToken);

                    return(new HttpRequestOutput <TOutput>
                    {
                        Headers = rsp.Headers,
                        StatusCode = rsp.StatusCode,
                        Content = output
                    });
                }
            }
        }
 public Task <HttpRequestOutput> SendAsync(string serviceName, HttpRequestInput input)
 {
     if (input.Properties == null)
     {
         input.Properties = new System.Collections.Generic.Dictionary <string, object>();
     }
     input.Properties[PropertyNames.CircuitKey] = input.
                                                  return(_client.SendAsync(input));
 }
示例#4
0
        public async Task <HttpRequestOutput> SendAsync(HttpRequestInput input, CancellationToken cancellationToken)
        {
            var rsp = await _sender.SendAsync(BuildRequest(input), cancellationToken);

            return(new HttpRequestOutput
            {
                Headers = rsp.Headers,
                StatusCode = rsp.StatusCode
            });
        }
示例#5
0
        public async Task <HttpRequestOutput> SendAsync <TInput>(HttpRequestInput <TInput> input, CancellationToken cancellationToken)
        {
            using (var ms = new MemoryStream())
            {
                using (var request = await BuildRequestAsync(input, ms))
                {
                    var rsp = await _sender.SendAsync(request, cancellationToken);

                    return(new HttpRequestOutput
                    {
                        Headers = rsp.Headers,
                        StatusCode = rsp.StatusCode
                    });
                }
            }
        }
示例#6
0
        private HttpRequestSenderInput BuildRequest(HttpRequestInput input)
        {
            var result = new HttpRequestSenderInput();

            result.Uri        = input.Uri;
            result.Headers    = input.Headers;
            result.Method     = input.Method;
            result.Retry      = input.Retry;
            result.Timeout    = input.Timeout;
            result.Properties = input.Properties;

            if (input.OnFailure != null)
            {
                result.OnFailure = (r) => {
                    var serializer = _serializers.FirstOrDefault(x => x.IsApplicable(r.ContentType));
                    return(input.OnFailure(r, serializer));
                };
            }

            return(result);
        }
 public Task <HttpRequestOutput <TOutput> > SendAsync <TInput, TOutput>(string serviceName, HttpRequestInput <TInput> input)
 {
     throw new NotImplementedException();
 }