3

我正在使用带有 asp.net 核心的graphql-dotnetgraphql-dotnet 服务器。我已经通过以下方式配置了架构。

public class PdsGraphQlSchema: Schema
{
    public PdsGraphQlSchema()
    {
        FieldNameConverter = new PascalCaseFieldNameConverter();
        Query = CommonServiceLocator.ServiceLocator.Current.GetInstance<GraphQlQueries>();
        Mutation = CommonServiceLocator.ServiceLocator.Current.GetInstance<GraphQlMutations>();
    }
}

在这里我添加了FieldNameConverter = new PascalCaseFieldNameConverter();但我没有得到输出的变化。输出总是驼峰式。我如何可以忽略骆驼套管或使用 Pascale 套管。

对于 ConfigureServices,我使用了以下

services.AddGraphQL(_ =>
            {
                _.EnableMetrics = true;
                _.ExposeExceptions = true;
            });

services.AddSingleton();

在里面Configure我使用了以下

app.UseGraphQL<PdsGraphQlSchema>();
app.UseGraphQLPlayground(new GraphQLPlaygroundOptions
{   Path = "/ui/playground" });

期待您的帮助。

4

2 回答 2

1

对于这个问题,是由于DefaultGraphQLExecuter中没有设置造成FieldNameConverterGetOptions

尝试以下解决方案:

  • 自定义DefaultGraphQLExecuter.

    public class MyDefaultGraphQLExecuter<TSchema> : DefaultGraphQLExecuter<TSchema>
         where TSchema : ISchema
    {
    
        public MyDefaultGraphQLExecuter(TSchema schema, IDocumentExecuter documentExecuter, IOptions<GraphQLOptions> options, IEnumerable<IDocumentExecutionListener> listeners, IEnumerable<IValidationRule> validationRules) 
            : base(schema, documentExecuter, options, listeners, validationRules)
        {
        }
    
        protected override ExecutionOptions GetOptions(string operationName, string query, Inputs variables, object context, CancellationToken cancellationToken)
        {
            var options = base.GetOptions(operationName, query, variables, context, cancellationToken);
            options.FieldNameConverter = Schema.FieldNameConverter;
            return options;
        } 
    }
    
  • 替换内置DefaultGraphQLExecuter

                services.AddGraphQL(options =>
            {
                options.EnableMetrics = true;
                options.ExposeExceptions = Environment.IsDevelopment();                
                //options.
            })
            .AddWebSockets()
            .AddDataLoader();
    
            services.AddMvc();
    
            services.AddTransient(typeof(IGraphQLExecuter<>), typeof(MyDefaultGraphQLExecuter<>));
    
于 2018-11-27T09:36:24.190 回答
1

您必须使用架构中的 NameConverter 字段

public class AppSchema : Schema
{
    public AppSchema(IServiceProvider provider)
        : base(provider)
    {
        NameConverter = new GraphQL.Conversion.DefaultNameConverter();
        Query = new AppQuery();
        Mutation = new AppMutation();
    }
}

你有 3 个选项

1- DefaultFieldNameConverter() 没有改变,你看到你在输出中写了什么

2- PascalCaseFieldNameConverter() 在所有第一个字符到小写

3- CamelCaseFieldNameConverter() 在所有第一个字符到小写

于 2021-04-14T17:29:42.047 回答