Asp.net core 如何访问ASP.NET核心GraphQL中嵌套字段中的参数

Asp.net core 如何访问ASP.NET核心GraphQL中嵌套字段中的参数,asp.net-core,graphql,graphql-dotnet,Asp.net Core,Graphql,Graphql Dotnet,我有一个字段“statistics”的查询,它是一个具有三个不同累积值的子查询。我希望能够为statistics提供一个country参数,然后在子查询中的不同字段的解析器中访问该参数 我正在使用GraphQL.Server.Transports.AspNetCore nuget包。子查询是使用IDependencyResolver解析的,因为它对不同字段的解析程序中使用的服务有一些依赖关系 我试图通过ResolveFieldContext访问父级,但它似乎不可用。上下文中有一个名为“Sourc

我有一个字段“statistics”的查询,它是一个具有三个不同累积值的子查询。我希望能够为statistics提供一个country参数,然后在子查询中的不同字段的解析器中访问该参数

我正在使用GraphQL.Server.Transports.AspNetCore nuget包。子查询是使用IDependencyResolver解析的,因为它对不同字段的解析程序中使用的服务有一些依赖关系

我试图通过ResolveFieldContext访问父级,但它似乎不可用。上下文中有一个名为“Source”的属性,但它引用的是子查询对象

如果我们看看GraphQL的其他实现,这似乎是可能的,但我不知道如何从ASP.NET核心获得结果

下面的代码显示了名为“CompanyGroupQuery”的主查询的一部分

字段(
“统计”,
参数:new QueryArguments(new QueryArgument{Name=“country”}),
resolve:context=>resolver.resolve()
);
子查询如下所示

字段(
“completeInvoicesCount”,
解析:上下文=>{
//这是为了展示我正在努力实现的目标
var parent=context.parent;
var companyId=context.GetArgument(“companyId”);
var country=context.GetArgument(“国家”);
返回null;
}
);

我找到了这个问题的解决方案,以防有人对此感兴趣。
不要试图直接访问父对象,而是创建一个查询可以从中继承的类。在本例中,我创建了一个统计类,其中包含国家代码的属性。然后在统计字段解析器中填充该属性,并使用该值返回统计类型的新对象。然后,我可以通过查看context.Source.country从子查询访问国家代码,然后我就不将country属性映射到子查询中的字段,因为我不想公开它

我找到了这个问题的解决方案,以防有人感兴趣。
不要试图直接访问父对象,而是创建一个查询可以从中继承的类。在本例中,我创建了一个统计类,其中包含国家代码的属性。然后在统计字段解析器中填充该属性,并使用该值返回统计类型的新对象。然后,我可以通过查看context.Source.country从子查询访问国家代码,然后我就不将country属性映射到子查询中的字段,因为我不想公开它

下面是SUNMO回答的一个例子,其中有一些描述性的评论:

//这是一个内部对象,其属性不一定需要
//作为GraphQL字段公开。它的目的是传播参数或一些
//可在子图形类型中进一步解析的部分解析数据。
公共课统计
{
公共字符串CompanyId{get;set;}
公共字符串国家{get;set;}
}
//这是根GraphQL查询类。
公共类MyQuery:ObjectGraphType
{
私有常量字符串CompanyIdArgumentName=“companyId”;
private const string CountryArgumentName=“country”;
公共MyQuery()
{
场(
名称:“统计”,
参数:新的QueryArguments(
新QueryArgument{Name=CompanyIdArgumentName},
新QueryArgument{Name=CountryArgumentName}
),
解析:上下文=>{
返回新的统计数据
{
CompanyId=context.GetArgument(CompanyIdArgumentName),
Country=context.GetArgument(CountryArgumentName)
};
}
//在上面的'resolve'实现中,我们传递的是值
//新的统计对象的参数的
//CompanyStatisticsType的context.Source
);
}
}
公共类CompanyStatisticsType:ObjectGraphType
{
上市公司统计类型()
{
场(
名称:“completeInvoicesCount”,
解析:上下文=>{
返回GetCompletedInvoicesCount(
companyId:context.Source.companyId,
国家:context.Source.country
//上面我们使用的是context.Source,它是一个
//“Statistics”类的实例。
);
}
);
字段(statistics=>statistics.Country);
//请注意,我们是如何公开上面的'country'字段而不是'companyId',
//进一步证明`统计数据'上并非所有财产`
//类需要作为GraphQL字段公开。
}
}

以下是SUNMO回答的一个示例,其中包含一些描述性的注释:

//这是一个内部对象,其属性不一定需要
//作为GraphQL字段公开。它的目的是传播参数或一些
//可在子图形类型中进一步解析的部分解析数据。
公共课统计
{
公共字符串CompanyId{get;set;}
公共字符串国家{get;set;}
}
//这是根GraphQL查询类。
公共类MyQuery:ObjectGraphType
{
私有常量字符串CompanyIdArgumentName=“companyId”;
private const string CountryArgumentName=“country”;
公共MyQuery()
{
场(
名称:“统计”,
参数:新的QueryArguments(
新QueryArgument{Name=CompanyIdArgumentName},
新QueryArgument{Name=CountryArgumentName}
),
解析:上下文=>{