public async Task Invoke(HttpContext context) { var originalBody = context.Response.Body; try { //await FixUserName(context); using (var memStream = new MemoryStream()) { context.Response.Body = memStream; var webApiLogMessage = LogTools.CreateLogMessage <WebApiLogMessage>(context); await _next(context); await FixException(context); await FinalizeResponse(memStream, originalBody, context, _logger, webApiLogMessage); } } catch (Exception exception) { _logger.LogError(exception.ToString()); } finally { context.Response.Body = originalBody; } }
//private async Task FixUserName(HttpContext context) //{ // if (!context.Items.ContainsKey(FilterConstants.UserName) && // context.User?.Identity != null && // !string.IsNullOrEmpty(context.User.Identity.Name)) // { // context.Items.Add(FilterConstants.UserName, context.User.Identity.Name); // } // //else // //{ // // var authResult = await context.AuthenticateAsync("Bearer"); // // if (!context.Items.ContainsKey(FilterConstants.UserName) && !string.IsNullOrEmpty(authResult?.Principal?.Identity?.Name)) // // context.Items.Add(FilterConstants.UserName, authResult?.Principal?.Identity?.Name); // //} //} /// <summary> /// Финализация обработки запроса /// </summary> private async Task FinalizeResponse(MemoryStream memStream, Stream originalBody, HttpContext context, ILogger logger, WebApiLogMessage webApiLogMessage) { memStream.Position = 0; var responceBodyStream = new StreamReader(memStream); using (responceBodyStream) { string responseBody = responceBodyStream.ReadToEnd(); memStream.Position = 0; await memStream.CopyToAsync(originalBody); if (context.Items.ContainsKey("excpetionReceived")) { var webApiExceptionLogMessage = LogTools.CreateLogMessage <WebApiExceptionLogMessage>(context); webApiExceptionLogMessage.ExceptionReceived = context.Items["excpetionReceived"] as Exception; LogTools.WriteLogMessage(context, webApiExceptionLogMessage, logger, responseBody); } else { LogTools.WriteLogMessage(context, webApiLogMessage, logger, responseBody); } } }