Пример #1
0
        /// <summary>
        /// Extensão que configura o Handler para tratamento de erros
        /// </summary>
        /// <param name="app">Applicação</param>
        public static IApplicationBuilder ConfigureDefaultExceptionHandler(
            this IApplicationBuilder app)
        {
            IParserHelper parserHelper = app.ApplicationServices.GetRequiredService <IParserHelper>();

            app
            .UseMiddleware <Middleware.UnhandledExceptionMiddleware>()
            .UseExceptionHandler(config =>
            {
                config.Run(async context =>
                {
                    IExceptionHandlerFeature error = context.Features.Get <IExceptionHandlerFeature>();
                    if (error != null)
                    {
                        context.Response.StatusCode = error.Error switch
                        {
                            UnauthorizedAccessException unauthorizedAccessException => StatusCodes.Status401Unauthorized,
                            _ => StatusCodes.Status400BadRequest,
                        };

                        if (context.Response.StatusCode != StatusCodes.Status401Unauthorized)
                        {
                            context.Response.ContentType = "application/json";

                            ViewModel.ApiErrorResponse apiError = new ViewModel.ApiErrorResponse();
                            apiError.Errors.Add(new ViewModel.ApiErrorDetailResponse());

                            await context.Response.WriteAsync(parserHelper.ToJson(apiError)).ConfigureAwait(false);
                        }
                    }
                });
            })
            .UseHsts();

            return(app);
        }
Пример #2
0
        public void execution_must_be_fast()
        {
            //warm up
            _parserHelper
            .ToJson(new { Id = 1, Name = "Abc" });

            _parserHelper
            .ExecutionTimeOf(s => s.ToJson(new { Id = 1, Name = "Abc" }))
            .Should()
            .BeLessOrEqualTo(MaxExecutionTime);

            _parserHelper
            .ExecutionTimeOf(s => s.ToJson(new
            {
                Id   = 1,
                Name = "Abc",
                List = new[]
                {
                    new { Id = 2, Name = "" },
                    new { Id = 3, Name = "XYZ" }
                },
                Other = new
                {
                    OtherId   = 4333,
                    OtherName = "Test"
                }
            }))
            .Should()
            .BeLessOrEqualTo(MaxExecutionTime);

            _parserHelper
            .ExecutionTimeOf(s => s.ToJson(new Mocks.SimpleModel()
            {
                Code = 123456789012345678,
                Id   = 123,
                Name = nameof(Mocks.SimpleModel)
            }))
            .Should()
            .BeLessOrEqualTo(MaxExecutionTime);

            _parserHelper
            .ExecutionTimeOf(s => s.ToJson(new Mocks.ComplexModel()
            {
                Code         = 987642341212114498,
                Id           = 67890,
                Name         = nameof(Mocks.ComplexModel),
                SimpleModels = new Mocks.SimpleModel[]
                {
                    new Mocks.SimpleModel()
                    {
                        Id = 1, Name = nameof(Mocks.SimpleModel), Code = 987654347865
                    },
                    new Mocks.SimpleModel()
                    {
                        Id = 2, Name = nameof(Mocks.SimpleModel), Code = 0475039592398
                    }
                }
            }))
            .Should()
            .BeLessOrEqualTo(MaxExecutionTime);

            _parserHelper
            .ExecutionTimeOf(s => s.FromJson <dynamic>("{\"id\":123,\"name\":\"SimpleModel\",\"code\":123456789012345678}"))
            .Should()
            .BeLessOrEqualTo(MaxExecutionTime);

            _parserHelper
            .ExecutionTimeOf(s => s.FromJson <dynamic>("{\"id\":67890,\"name\":\"ComplexModel\",\"code\":987642341212114498,\"simpleModels\":[{\"id\":1,\"name\":\"SimpleModel\",\"code\":987654347865},{\"id\":2,\"name\":\"SimpleModel\",\"code\":475039592398}]}"))
            .Should()
            .BeLessOrEqualTo(MaxExecutionTime);

            _parserHelper
            .ExecutionTimeOf(s => s.FromJson <Mocks.SimpleModel>("{\"id\":123,\"name\":\"SimpleModel\",\"code\":123456789012345678}"))
            .Should()
            .BeLessOrEqualTo(MaxExecutionTime);

            _parserHelper
            .ExecutionTimeOf(s => s.FromJson <Mocks.ComplexModel>("{\"id\":67890,\"name\":\"ComplexModel\",\"code\":987642341212114498,\"simpleModels\":[{\"id\":1,\"name\":\"SimpleModel\",\"code\":987654347865},{\"id\":2,\"name\":\"SimpleModel\",\"code\":475039592398}]}"))
            .Should()
            .BeLessOrEqualTo(MaxExecutionTime);

            _parserHelper
            .ExecutionTimeOf(s => s.To <Mocks.SimpleModel, dynamic>(new
            {
                Id   = 123,
                Code = 56789,
                Name = nameof(Mocks.SimpleModel)
            }))
            .Should()
            .BeLessOrEqualTo(MaxExecutionTime);

            _parserHelper
            .ExecutionTimeOf(s => s.To <dynamic, Mocks.SimpleModel>(new Mocks.SimpleModel()
            {
                Id   = 123,
                Code = 56789,
                Name = nameof(Mocks.SimpleModel)
            }))
            .Should()
            .BeLessOrEqualTo(MaxExecutionTime);

            _parserHelper
            .ExecutionTimeOf(s => s.To <Mocks.ComplexModel, Mocks.SimpleModel>(new Mocks.SimpleModel()
            {
                Id   = 123,
                Code = 56789,
                Name = nameof(Mocks.SimpleModel)
            }))
            .Should()
            .BeLessOrEqualTo(MaxExecutionTime);
        }