private static HttpClient PrepareHttpClient(HttpContext httpContext, CallbackTemplate callbackTemplate) { var factory = httpContext.RequestServices.GetService <IHttpClientFactory>(); var httpClient = factory.CreateClient(); httpClient.Timeout = TimeSpan.FromMilliseconds(callbackTemplate.Timeout.GetValueOrDefault()); return(httpClient); }
private async Task DelayRequest(CallbackTemplate callbackTemplate, long elapsedMilliseconds) { var remainingDelay = TimeSpan.FromMilliseconds(callbackTemplate.Delay.GetValueOrDefault() - elapsedMilliseconds); if (elapsedMilliseconds < remainingDelay.TotalMilliseconds) { _logger.LogDebug("Callback delay: {0} milliseconds", remainingDelay.TotalMilliseconds); await Task.Delay(remainingDelay); } }
private static HttpRequestMessage PrepareHttpRequest(CallbackTemplate callbackTemplate, MockacoOptions options) { var request = new HttpRequestMessage(new HttpMethod(callbackTemplate.Method), callbackTemplate.Url); var formatting = callbackTemplate.Indented.GetValueOrDefault(true) ? Formatting.Indented : default; if (callbackTemplate.Body != null) { request.Content = callbackTemplate.Headers?.ContainsKey(HttpHeaders.ContentType) == true ? new StringContent(callbackTemplate.Body.ToString(), Encoding.UTF8, callbackTemplate.Headers[HttpHeaders.ContentType]) : new StringContent(callbackTemplate.Body.ToString(formatting)); } PrepareHeaders(callbackTemplate, request, options); return(request); }
private static void PrepareHeaders(CallbackTemplate callBackTemplate, HttpRequestMessage httpRequest, MockacoOptions options) { if (callBackTemplate.Headers != null) { foreach (var header in callBackTemplate.Headers.Where(h => h.Key != HttpHeaders.ContentType)) { if (httpRequest.Headers.Contains(header.Key)) { httpRequest.Headers.Remove(header.Key); } httpRequest.Headers.Add(header.Key, header.Value); } } if (!httpRequest.Headers.Accept.Any()) { httpRequest.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(options.DefaultHttpContentType)); } }
private async Task PerformCallback(HttpContext httpContext, CallbackTemplate callbackTemplate, MockacoOptions options, long elapsedMilliseconds) { try { var request = PrepareHttpRequest(callbackTemplate, options); var httpClient = PrepareHttpClient(httpContext, callbackTemplate); await DelayRequest(callbackTemplate, elapsedMilliseconds); var stopwatch = Stopwatch.StartNew(); _logger.LogDebug("Callback started"); await PerformRequest(request, httpClient); _logger.LogDebug("Callback finished in {0} ms", stopwatch.ElapsedMilliseconds); } catch (Exception ex) { _logger.LogError(ex, "Callback error"); } }