public async Task InvokeAsync(HttpContext context, ILogStorage logStorage) { var log = new LoggerModel { Path = context.Request.Path, Method = context.Request.Method, QueryString = context.Request.QueryString.ToString() }; if (context.Request.Method == "POST") { context.Request.EnableBuffering(); var body = await new StreamReader(context.Request.Body)//что пользователь отправил в теле запроса .ReadToEndAsync(); context.Request.Body.Position = 0; log.RequestBody = body; } log.RequestedOn = DateTimeOffset.Now; var originalBodyStream = context.Response.Body; using (var responseBodyStream = new MemoryStream()) { context.Response.Body = responseBodyStream; await _next.Invoke(context); responseBodyStream.Position = 0; var response = await new StreamReader(responseBodyStream) .ReadToEndAsync(); responseBodyStream.Position = 0; log.Response = response; log.ResponseCode = context.Response.StatusCode.ToString(); //log.RespondedOn = DateTime.UtcNow; log.RespondedOn = DateTimeOffset.Now; logStorage.Store(log); await responseBodyStream.CopyToAsync(originalBodyStream); } //_logger.LogInformation( // "Request {header.Value} {method} {url} => {statusCode}", // context.Request?.Headers, // context.Request?.Method, // context.Request?.Path.Value, // context.Response?.StatusCode); }
public void Store(LoggerModel log) { string[] lines = { $"Path: {log.Path}", $"QueryString: {log.QueryString}", $"Method: {log.Method}", $"RequestBody: {log.RequestBody}", $"Requested at: {log.RequestedOn}", $"Response: {log.Response}", $"ResponseCode: {log.ResponseCode}", $"Responded at: {log.RespondedOn}", Environment.NewLine }; System.IO.File.AppendAllLines(path, lines); }