Горячий шоколад 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-глубина .