public async Task HandleResponseSetsResponseBody() { var factory = new Mock <IHttpLogMessageFactory>(); var accessor = new Mock <IHttpContextAccessor>(); var handler = new DefaultHttpResponseLogHandler(factory.Object, accessor.Object, DefaultOptions.Default); var context = new DefaultHttpContext(); var logMessage = new HttpResponseLog(0, null, null); var content = "This the http response content!"; var response = new FakeHttpResponse(content); var bodyWrapper = new HttpResponseBodyWrapper(response.Body); context.Features.Set(bodyWrapper); context.Features.Set <IHttpResponseFeature>(response); accessor.Setup(h => h.HttpContext).Returns(context); factory.Setup(f => f.Create(context.Response)).Returns(logMessage); await handler.Handle(context.Response); bodyWrapper.Dispose(); Assert.Equal(logMessage.Body, content); }
public static void ShouldBe(this HttpResponseLog responseLog, HttpResponseMessage response) { foreach (var header in response.Headers) { var(key, value) = responseLog.Headers.First(h => h.Key == header.Key); Assert.Equal(header.Key, key); Assert.Equal(string.Join(',', header.Value), value); } var responseBody = response.Content.ReadAsStringAsync().GetAwaiter().GetResult(); Assert.Equal(responseBody, responseLog.Body?.ToString()); Assert.Equal((int)response.StatusCode, responseLog.StatusCode); }
public static void LogResponseHeaders(HttpResponse response, HttpLoggingOptions options, ILogger logger) { var list = new List <KeyValuePair <string, object?> >( response.Headers.Count + DefaultResponseFieldsMinusHeaders); if (options.LoggingFields.HasFlag(HttpLoggingFields.ResponseStatusCode)) { list.Add(new KeyValuePair <string, object?>(nameof(response.StatusCode), response.StatusCode)); } if (options.LoggingFields.HasFlag(HttpLoggingFields.ResponseHeaders)) { FilterHeaders(list, response.Headers, options._internalResponseHeaders); } var httpResponseLog = new HttpResponseLog(list); logger.ResponseLog(httpResponseLog); }
public ValueTask StoreAsync(HttpResponseLog responseLog, CancellationToken cancellationToken = default) { return(SaveLogMessageAsync(responseLog, cancellationToken)); }
public static void ResponseLog(this ILogger logger, HttpResponseLog responseLog) => logger.Log( LogLevel.Information, new EventId(2, "ResponseLog"), responseLog, exception: null, formatter: HttpResponseLog.Callback);