public static IRequestBuilder AddHeader(this IRequestBuilder builder, string name, string value) { if (!string.IsNullOrEmpty(name)) { try { builder.Message.Headers.Add(name, value); } catch (Exception e) { var wrapper = new HttpClientException($"Unable to set header: {name} to '{value}'", builder.Message.RequestUri, e); builder.GetSettings().OnException(builder, new HttpExceptionArgs(builder, wrapper)); } } return(builder); }
public static IRequestBuilder AddHeaders(this IRequestBuilder builder, IDictionary <string, string> headers) { if (headers == null) { return(builder); } var pHeaders = builder.Message.Headers; foreach (var kv in headers) { try { switch (kv.Key) { case "Accept": pHeaders.Accept.ParseAdd(kv.Value); break; case "Connect-Type": builder.Message.Content.Headers.ContentType = new MediaTypeHeaderValue(kv.Value); break; default: pHeaders.Add(kv.Key, kv.Value); break; } } catch (Exception e) { var wrapper = new HttpClientException($"Unable to set header: {kv.Key} to '{kv.Value}'", builder.Message.RequestUri, e); builder.GetSettings().OnException(builder, new HttpExceptionArgs(builder, wrapper)); } } return(builder); }
internal static async Task <HttpCallResponse <T> > SendAsync <T>(IRequestBuilder <T> builder, HttpMethod method, CancellationToken cancellationToken = default) { var settings = builder.GetSettings(); settings.OnBeforeSend(builder, builder.Inner); var request = builder.Inner.Message; request.Method = method; Exception exception = null; HttpResponseMessage response = null; try { using (settings.ProfileRequest?.Invoke(request)) { using (request) { using (response = await settings.ClientPool.Get(builder.Inner).SendAsync(request, cancellationToken)) { if (!response.IsSuccessStatusCode && !builder.Inner.IgnoreResponseStatuses.Contains(response.StatusCode)) { exception = new HttpClientException( $"Response code was {(int)response.StatusCode} ({response.StatusCode}) from {response.RequestMessage.RequestUri}: {response.ReasonPhrase}", response.StatusCode, response.RequestMessage.RequestUri); stackTraceString.SetValue(exception, new StackTrace(true).ToString()); } else { var data = await builder.Handler(response); return(HttpCallResponse.Create(response, data)); } } } } } catch (TaskCanceledException ex) { exception = cancellationToken.IsCancellationRequested ? new HttpClientException($"HttpClient request cancelled by token request.", builder.Inner.Message.RequestUri, ex) : new HttpClientException($"HttpClient request time out: {builder.Inner.Timeout.TotalMilliseconds:N0}ms", builder.Inner.Message.RequestUri, ex); } catch (Exception ex) { exception = ex; } var ret = response == null ? HttpCallResponse.Create <T>(request, exception) : HttpCallResponse.Create <T>(response, exception); (builder.Inner as HttpBuilder)?.AddExceptionData(exception); if (builder.Inner.LogErrors) { var args = new HttpExceptionArgs(builder.Inner, exception); builder.Inner.OnBeforeExceptionLog(args); if (!args.AbortLogging) { settings.OnException(builder, args); } } return(ret); }