public async Task Invoke(HttpContext context, IMessageProvider messageProvider) { try { await _next.Invoke(context); } catch (Exception ex) { if (_env.IsProduction()) { messageProvider.AddMessage(new Message(MessageType.Error, "Internal Server Error")); } else { messageProvider.AddException(ex); } _logger.LogCritical(ex, ex.Message); if (!context.Response.HasStarted) { context.Response.StatusCode = StatusCodes.Status500InternalServerError; context.Response.ContentType = "application/json"; var json = JsonConvert.SerializeObject(messageProvider.Messages); await context.Response.WriteAsync(json); } } }