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); }
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; }
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; }
public HttpSendingContext(IHttpBuilderContext context, HttpRequestMessage request) : base(context, request) { _result = new Modifiable <HttpResponseMessage>(); }