Esempio n. 1
0
        protected ActionResult <TResult> HandleQuery <TQuery, TResult>(
            TQuery query)
            where TQuery : IQuery <TResult>
        {
            var context = new QueryContext {
                CorrelationId = HttpContext.GetCorrelationId()
            };

            using (LoggerFacade.PushToContext("CorrelationId", context.CorrelationId))
            {
                var queryResult = Startup.AppGateway.QueriesGateway.Handle <TQuery, TResult>(query, context);

                if (queryResult.UnknownError != null)
                {
                    Logger.LogWebError(queryResult.UnknownError, Request);

                    return(StatusCode(
                               StatusCodes.Status500InternalServerError,
                               ErrorContentFactory.Create(queryResult.UnknownError, context.CorrelationId)));
                }
                else if (queryResult.KnownError != null)
                {
                    Logger.LogWebError(queryResult.KnownError, Request);

                    return(StatusCode(
                               StatusCodes.Status500InternalServerError,
                               ErrorContentFactory.Create(queryResult.KnownError, context.CorrelationId)));
                }
                else if (queryResult.Output.Result == null)
                {
                    return(NotFound());
                }
                else
                {
                    if (queryResult.Output.TotalCount.HasValue)
                    {
                        Response.Headers.Add("x-total-count", queryResult.Output.TotalCount.Value.ToString());
                    }

                    return(queryResult.Output.Result);
                }
            }
        }
Esempio n. 2
0
        protected ActionResult <TResult> HandleCommand <TCommand, TResult>(
            TCommand command)
            where TCommand : ICommand <TResult>
        {
            var context = new CommandContext {
                CorrelationId = HttpContext.GetCorrelationId()
            };

            using (LoggerFacade.PushToContext("CorrelationId", context.CorrelationId))
            {
                var commandResult = Startup.AppGateway.CommandsGateway.Handle <TCommand, TResult>(command, context);

                if (commandResult.UnknownError != null)
                {
                    Logger.LogWebError(commandResult.UnknownError, Request);

                    return(StatusCode(
                               StatusCodes.Status500InternalServerError,
                               ErrorContentFactory.Create(commandResult.UnknownError, context.CorrelationId)));
                }
                else if (commandResult.KnownError != null)
                {
                    Logger.LogWebError(commandResult.KnownError, Request);

                    return(StatusCode(
                               StatusCodes.Status500InternalServerError,
                               ErrorContentFactory.Create(commandResult.KnownError, context.CorrelationId)));
                }
                else if (commandResult.ValidationErrors != null)
                {
                    return(StatusCode(
                               StatusCodes.Status400BadRequest,
                               commandResult.ValidationErrors));
                }
                else
                {
                    return(commandResult.Result);
                }
            }
        }
Esempio n. 3
0
        public async Task Invoke(
            HttpContext context)
        {
            try
            {
                await _next(context);
            }
            catch (Exception ex)
            {
                using (LoggerFacade.PushToContext("CorrelationId", context.GetCorrelationId()))
                {
                    Logger.LogWebError(ex, context.Request);
                }

                var content     = ErrorContentFactory.Create(ex, context.GetCorrelationId());
                var contentJson = JsonConvert.SerializeObject(content);

                context.Response.ContentType = "application/json";
                context.Response.StatusCode  = StatusCodes.Status500InternalServerError;

                await context.Response.WriteAsync(contentJson);
            }
        }