有没有办法在 GraphQL 类型上默认忽略所有字段并只添加想要的字段?

Mic*_*aib 2 .net asp.net graphql hotchocolate

有没有办法在 GraphQL 类型上默认忽略所有字段并只添加想要的字段?

Hot Chocolate 自动从 C# 类型推断出 GraphQL 类型成员。

这意味着以下代码...

public class Foo
{
    public string Bar { get; set; }

    public string? Baz { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
public class FooType : ObjectType<Foo>
{
}
Run Code Online (Sandbox Code Playgroud)

将导致以下 GraphQL 类型:

type Foo {
  bar: String!
  baz: String
}
Run Code Online (Sandbox Code Playgroud)

在我的用例中,我想更改此行为并明确定义在 GraphQL 类型中使用我的 C# 类型的哪个类型成员。

Mic*_*aib 8

Hot Chocolate 允许您反转每种类型或整个模式的行为。

要声明一种特定类型的所有字段,请明确执行以下操作:

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);    
    }
}
Run Code Online (Sandbox Code Playgroud)
type Foo {
  bar: String!
  baz: String
}
Run Code Online (Sandbox Code Playgroud)

如果要在架构中的所有类型上显式声明字段,可以设置以下选项:

services
    .AddGraphQLServer()
    .AddQueryType<Query>()
    // this option will, by default, define that you want to declare everything explicitly.
    .ModifyOptions(c => c.DefaultBindingBehavior = BindingBehavior.Explicit);
Run Code Online (Sandbox Code Playgroud)

如果全局设置它,则可以始终按类型覆盖它,这意味着在这种情况下,您可以定义以按类型隐式绑定成员。