Exemple #1
0
        private async Task <HttpRequestMessage> CreateRequest(IHttpBuilderContext context)
        {
            var request = new HttpRequestMessage(context.Method, context.Uri);

            if (context.ContentFactory != null)
            {
                request.Content = await context.ContentFactory?.Invoke(context);
            }

            _clientBuilder.ApplyRequestHeaders(request);

            // if we haven't added an accept header, add a default
            if (!string.IsNullOrWhiteSpace(context.MediaType))
            {
                request.Headers.Accept.AddDistinct(h => h.MediaType, context.MediaType);
            }

            if (context.AutoDecompression)
            {
                request.Headers.AcceptEncoding.AddDistinct(h => h.Value, "gzip");
                request.Headers.AcceptEncoding.AddDistinct(h => h.Value, "deflate");
                request.Headers.AcceptEncoding.AddDistinct(h => h.Value, "identity");
            }

            return(request);
        }
 public HttpExceptionContext(IHttpBuilderContext context, HttpResponseMessage response, Exception exception)
     : base(context, response?.RequestMessage)
 {
     Exception         = exception;
     Response          = response;
     _exceptionHandled = new Modifiable <bool>(false);
 }
Exemple #3
0
 public HttpBuilderContext(IHttpBuilderContext context)
 {
     Items      = context.Items;
     ResultType = context.ResultType;
     Builder    = context.Builder;
     SuppressCancellationErrors = context.SuppressCancellationErrors;
     Uri               = context.Uri;
     Method            = context.Method;
     MediaType         = context.MediaType;
     ContentEncoding   = context.ContentEncoding;
     CompletionOption  = context.CompletionOption;
     AutoDecompression = context.AutoDecompression;
     ContentFactory    = context.ContentFactory;
     ExceptionFactory  = context.ExceptionFactory;
     HandlerRegister   = context.HandlerRegister;
     Token             = context.Token;
     CacheMetadata     = context.CacheMetadata;
     ResponseValidator = context.ResponseValidator;
 }
Exemple #4
0
        private async Task <HttpResponseMessage> ResultFromRequestAsync(IHttpBuilderContext context, HttpRequestMessage request, CancellationToken token)
        {
            ExceptionDispatchInfo capturedException = null;
            HttpResponseMessage   response          = null;

            try
            {
                var sendingContext = new HttpSendingContext(context, request);

                token.ThrowIfCancellationRequested();

                await context.HandlerRegister.OnSending(sendingContext);

                if (sendingContext.Result != null)
                {
                    response = sendingContext.Result;
                }
                else
                {
                    token.ThrowIfCancellationRequested();

                    using (var client = _clientBuilder.Build())
                        response = await client.SendAsync(request, context.CompletionOption, token);
                }

                if (!context.IsSuccessfulResponse(response) && context.ExceptionFactory != null)
                {
                    var ex = context.ExceptionFactory(response, request);

                    if (ex != null)
                    {
                        throw ex;
                    }
                }

                var sentContext = new HttpSentContext(context, request, response);

                token.ThrowIfCancellationRequested();

                await context.HandlerRegister.OnSent(sentContext);

                response = sentContext.Result;
            }
            catch (Exception ex)
            {
                capturedException = ExceptionDispatchInfo.Capture(ex);
            }

            if (capturedException != null)
            {
                var exContext = new HttpExceptionContext(context, response, capturedException.SourceException);

                await context.HandlerRegister.OnException(exContext);

                if (!exContext.ExceptionHandled)
                {
                    capturedException.Throw();
                }
            }

            return(response);
        }
 protected HttpHandlerContext(IHttpBuilderContext context, HttpRequestMessage request)
     : base(context)
 {
     Request = request;
 }
Exemple #6
0
 public HttpSendingContext(IHttpBuilderContext context, HttpRequestMessage request)
     : base(context, request)
 {
     _result = new Modifiable <HttpResponseMessage>();
 }