如何在 C# 中获取请求的 GraphQL 字段?

Ole*_*siy 4 c# resolver graphql hotchocolate

我正在开发一个 GraphQL -> SQL 解析器,其中包含一些连接,因此是否请求某个字段会产生性能差异。有办法找出来吗?

我正在学习对象类型,所以我认为这可能与在其上设置解析器有关。但是解析器在独立于其他事物请求的字段级别上工作。而我试图在最顶层的查询级别上找出GraphQL 查询中请求了哪些字段。这将塑造 SQL 查询。

public class QueryType : ObjectType<Query>
{
    protected override void Configure(IObjectTypeDescriptor<Query> descriptor)
    {
        descriptor
            .Field(f => f.GetACUMonthlySummary(default!, default!, default!, default!, default!, default!))
            .Type<ListType<ACUMonthlySummaryType>>();
    }
}
Run Code Online (Sandbox Code Playgroud)

我看到了 js 的相关问题,但没有找到任何专门在 C# 和 HotChocolate 中的示例,这就是我们正在使用的。

Ole*_*siy 6

我不确定是否建议这样做,所以我很感谢反馈,但我发现以下方法可以列出所有选定的节点:

  1. 注入IResolverContext context(使用 HotChocolate.Resolvers)作为查询中的参数之一。
  2. context.Selection.SyntaxNode.SelectionSet.Selections给出一个IEnumerable<ISelectionNode>. 它恰好包含用户选择的字段。