public Task HandleAsync(HttpRequestResponseLog log) => Task.Run(() => { Console.WriteLine("Request Recieved!"); Console.WriteLine($"{nameof(log.RequestTime)}[{log.RequestTime}]"); Console.WriteLine($"RequestTime.LocalDateTime[{log.RequestTime.LocalDateTime}]"); Console.WriteLine($"{nameof(log.Scheme)}[{log.Scheme}]"); Console.WriteLine($"{nameof(log.Host)}[{log.Host}]"); Console.WriteLine($"{nameof(log.Path)}[{log.Path}]"); Console.WriteLine($"{nameof(log.QueryString)}[{log.QueryString}]"); Console.WriteLine($"{nameof(log.ResponseTime)}[{log.ResponseTime}]"); Console.WriteLine($"ResponseTime.LocalDateTime[{log.ResponseTime.LocalDateTime}]"); });
private async Task OnComplete(HttpRequestResponseLog httpRequestLog, HttpContext context) { var iAsyncRequestResponseLogHandle = (IAsyncRequestResponseLogHandle)context.RequestServices.GetService(typeof(IAsyncRequestResponseLogHandle)); var iRequestResponseLogHandle = (IRequestResponseLogHandle)context.RequestServices.GetService(typeof(IRequestResponseLogHandle)); if (iAsyncRequestResponseLogHandle != null) { await iAsyncRequestResponseLogHandle.HandleAsync(httpRequestLog); } else if (iRequestResponseLogHandle != null) { iRequestResponseLogHandle.Handle(httpRequestLog); } }
public async Task Invoke(HttpContext context) { var request = context.Request; var httpRequestLog = new HttpRequestResponseLog { RequestTime = DateTimeOffset.UtcNow, HasFormContentType = request.HasFormContentType, Form = request.HasFormContentType ? request.Form : null, Host = request.Host, IsHttps = request.IsHttps, Method = request.Method, Path = request.Path, PathBase = request.PathBase, Protocol = request.Protocol, Query = request.Query, QueryString = request.QueryString, RequestContentLength = request.ContentLength, RequestContentType = request.ContentType, RequestCookies = request.Cookies, RequestHeaders = GetHeaders(request.Headers), RouteValues = request.RouteValues, Scheme = request.Scheme, RequestBody = await GetRequestBody(request), }; var originalBodyStream = context.Response.Body; using var newResponseBody = _recyclableMemoryStreamManager.GetStream(); context.Response.Body = newResponseBody; await _next(context); newResponseBody.Seek(0, SeekOrigin.Begin); await newResponseBody.CopyToAsync(originalBodyStream); newResponseBody.Seek(0, SeekOrigin.Begin); httpRequestLog.ResponseBody = ReadStreamInChunks(newResponseBody); httpRequestLog.ResponseTime = DateTimeOffset.UtcNow; httpRequestLog.ResponseHeaders = GetHeaders(context.Response.Headers); httpRequestLog.RequestContentLength = context.Response.ContentLength; httpRequestLog.ResponseContentType = context.Response.ContentType; httpRequestLog.ResponseCookies = context.Response.Cookies; await OnComplete(httpRequestLog, context); }