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); }
private HttpRequestMessage BuildMessage(HttpRequestSenderInput input) { var msg = new HttpRequestMessage(); msg.Method = input.Method; msg.RequestUri = input.Uri; if (input.Headers != null) { foreach (var header in input.Headers) { msg.Headers.Add(header.Name, header.Value); } } if (input.Content != null) { msg.Content = input.Content; } if (input.Properties != null) { foreach (var property in input.Properties) { msg.Properties[property.Key] = property.Value; } } if (input.Retry.HasValue) { msg.Properties[Bolt.FluentHttpClient.Abstracts.Constants.PropertyNameRetryCount] = input.Retry.Value; } if (input.Timeout.HasValue) { msg.Properties[Bolt.FluentHttpClient.Abstracts.Constants.PropertyNameTimeout] = input.Timeout.Value; } return(msg); }
public async Task <HttpRequestSenderResponse> SendAsync(HttpRequestSenderInput input, CancellationToken cancellationToken) { HttpRequestSenderResponse result = null; using (var msg = BuildMessage(input)) { using (var httpResponse = await _client.SendAsync(msg, HttpCompletionOption.ResponseHeadersRead, cancellationToken)) { result = BuildRequestResponse(httpResponse); var isSucceed = httpResponse.IsSuccessStatusCode; if (isSucceed && input.OnSuccess == null) { HttpRequestLog.Trace("Response succeed and no handler for success defined. so returning basic response"); return(result); } if (!isSucceed && input.OnFailure == null) { HttpRequestLog.Trace("Failed response and no handler for failure defined. so returning basic response"); return(result); } if (httpResponse.Content == null) { HttpRequestLog.Trace("Content empty so returning basic response"); return(result); } var rsp = new HttpResponseContent { ContentLength = httpResponse.Content.Headers.ContentLength ?? 0, StatusCode = httpResponse.StatusCode, ContentType = httpResponse.Content.Headers.ContentType?.MediaType, Headers = result.Headers }; using (httpResponse.Content) { using (var sr = await httpResponse.Content.ReadAsStreamAsync()) { rsp.ContentStream = sr; rsp.StatusCode = httpResponse.StatusCode; if (isSucceed) { HttpRequestLog.Trace("Executing success handler"); await input.OnSuccess(rsp); } else { HttpRequestLog.Trace("Executing failure handler"); await input.OnFailure(rsp); } } } } } return(result); }