private async Task LogRequestResponseAsync(CentauroTechMessage centauroMessage, Guid messageUid, bool useDefaultEncoding = false) { Logger.Debug( new { StartTime = centauroMessage.StartTime, EndTime = centauroMessage.EndTime, TotalTime = centauroMessage.TotalTime, request = new { LogMessage = $"Request object", HttpMessageUid = messageUid, Uri = centauroMessage.RequestMessage?.RequestUri.ToString(), Method = centauroMessage.RequestMessage?.Method.ToString(), Headers = centauroMessage.RequestMessage?.Headers, Content = await GetContentAsync(centauroMessage.RequestMessage.Content, useDefaultEncoding), RequestSize = centauroMessage.RequestMessage.Content.ReadAsByteArrayAsync().Result.Length }, response = new { LogMessage = "Response object", RequestUid = messageUid, StatusCode = GetSatsusCodeNumber(centauroMessage.ResponseMessage.StatusCode), ReasonPhrase = centauroMessage.ResponseMessage.ReasonPhrase, Headers = centauroMessage.ResponseMessage?.Headers, Content = await GetContentAsync(centauroMessage.ResponseMessage.Content, useDefaultEncoding), ResponseSize = centauroMessage.ResponseMessage.Content.ReadAsByteArrayAsync().Result.Length } }); }
/// <summary> /// Sends an HTTP request to the inner handler to send to the server as an asynchronous operation. /// </summary> /// <param name="request"> The HTTP request message to send to the server.</param> /// <param name="cancellationToken">A cancellation token to cancel operation.</param> /// <returns>Returns System.Threading.Tasks.Task. The task object representing the asynchronous operation</returns> /// <exception cref="ArgumentNullException">The request was null.</exception> protected async override Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { if (InnerHandler == null) { InnerHandler = new HttpClientHandler(); } if (request == null) { throw new ArgumentNullException("request"); } var requestUid = Guid.NewGuid(); var centauroTechMessage = new CentauroTechMessage(request); try { centauroTechMessage.StartTime = DateTime.Now; centauroTechMessage.ResponseMessage = await base.SendAsync(centauroTechMessage.RequestMessage, cancellationToken); centauroTechMessage.EndTime = DateTime.Now; if (Logger.IsDebugEnabled) { try { if (centauroTechMessage.ResponseMessage != null) { await LogRequestResponseAsync(centauroTechMessage, requestUid); } } catch (InvalidOperationException) { Logger.Warn("Unable to parse content! Now trying with the default encoding..."); try { await LogRequestResponseAsync(centauroTechMessage, requestUid, true); } catch { throw; } } catch (Exception ex) { if (ex is AggregateException) { ex = ex.InnerException; } Logger.Error("Error getting the response message: " + ex.Message, ex); } } } catch (Exception ex) { if (ex is AggregateException) { ex = ex.InnerException; } Logger.Error("Error generating the log of the request: " + ex.Message, ex); } return(centauroTechMessage.ResponseMessage); }