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);
                }
            }
        }