Горячий шоколад GraphQL - MaxExecutionDepth не работает

Как я могу получить MaxExecutionDepthработать в Hot Chocolate GraphQL? Вот мой код:

    // Add GraphQL Services
    services.AddGraphQL(
        SchemaBuilder.New()
            // enable for authorization support
            .AddAuthorizeDirectiveType()
            .ModifyOptions(o => o.RemoveUnreachableTypes = true)
            .Create()
            .MakeExecutable(
                builder =>
                    builder
                        .UseDefaultPipeline()
                        .AddErrorFilter<UseExceptionMessageErrorFilter>()
                        .AddOptions(
                            new QueryExecutionOptions()
                            {
                                MaxExecutionDepth = 15
                            }))
            .Schema);

Я тестировал с этим, даже меняя MaxExecutionDepth до 1, но я все еще могу выполнять более 20 глубоких запросов.

2 ответа

Решение

Согласно разработчику из созданной мной проблемы GitHub, он смог заставить его работать следующим образом:

            services.AddGraphQL(
                SchemaBuilder.New()
                    // enable for authorization support
                    .AddAuthorizeDirectiveType()
                    .ModifyOptions(o => o.RemoveUnreachableTypes = true)
                    .Create(),
                new QueryExecutionOptions()
                {
                    MaxExecutionDepth = ApiConfigurationConstants.MaxExecutionDepth
                });
            services.AddErrorFilter<UseExceptionMessageErrorFilter>();

Поскольку исходному вопросу и ответу более 3 лет, поэтому для всех, кто, как и я, столкнулся с этой проблемой сейчас, есть еще один вариант (V13 HotChocolate):

В вашейProgram.csизмените раздел сервера GraphQl следующим образом и добавьтеAddMaxExecutionDepthRule:

      builder.Services.AddGraphQLServer()
    .AddQueryType<GraphQlQuery>()
    .AddProjections()
    .AddFiltering()
    .AddSorting()
    .AddMaxExecutionDepthRule(5);

Здесь 5 (или любое другое число) — это желаемая глубина.

Ссылка: https://chillicream.com/docs/hotchocolate/v13/security#execution-глубина .

Другие вопросы по тегам