#asp.net #.net #graphql #hotchocolate
#asp.net #.net #graphql #горячий шоколад
Вопрос:
Есть ли способ игнорировать все поля по умолчанию для типа GraphQL и добавлять только нужное поле?
Hot Chocolate автоматически выводит члены типа GraphQL из типа C #.
Это означает , что следующий код …
public class Foo
{
public string Bar { get; set; }
public string? Baz { get; set; }
}
public class FooType : ObjectType<Foo>
{
}
приведет к следующему типу GraphQL:
type Foo {
bar: String!
baz: String
}
В моем варианте использования я хочу изменить это поведение и явно определить, какой тип элемента моего типа C # используется в типе GraphQL.
Ответ №1:
Горячий шоколад позволяет изменить поведение для каждого типа или для всей схемы.
Чтобы объявить все поля для одного определенного типа, явно выполните следующие действия:
public class FooType : ObjectType<Foo>
{
protected override void Configure(IObjectTypeDescriptor<Person> descriptor)
{
// this defines that fields shall only be defined explicitly
descriptor.BindFieldsExplicitly();
// now declare the fields that you want to define.
descriptor.Field(t => t.Bar);
}
}
type Foo {
bar: String!
}
Если вы хотите явно объявлять поля для всех типов в вашей схеме, вы можете установить следующую опцию:
services
.AddGraphQLServer()
.AddQueryType<Query>()
// this option will, by default, define that you want to declare everything explicitly.
.ModifyOptions(c => c.DefaultBindingBehavior = BindingBehavior.Explicit);
Если вы установите его глобально, вы можете переопределить его всегда для каждого типа, что означает, что в этом случае вы можете определить неявную привязку членов по типу.
Комментарии:
1. Есть ли способ по умолчанию использовать явное поведение привязки только для фильтрации и сортировки? что-то вроде
.AddFiltering(c => c.DefaultBindingBehavior = BindingBehavior.Explicit)
2. Для полноты картины существует также обратный вариант (который используется по умолчанию):
descriptor.Field(...).Ignore()
3. Крошечное замечание, я думаю, что схема ответа неверна. «baz» не должно быть там, поскольку оно явно не определено. Это немного сбивает с толку, когда вы читаете это 😉
4. верно 🙂 Я исправил свой ответ.