【问题标题】:GraphQL.NET dynamic field typeGraphQL.NET 动态字段类型
【发布时间】:2020-04-09 03:38:39
【问题描述】:

我正在尝试将一个对象添加到我的 GraphQL.NET 模型,但我遇到了其中一个字段的问题。原来的类是

public class ShowCriterion
{
    public string RelatedEntity { get; set; }
    public object MatchValue { get; set; }
}

这需要一个具体化路径(如Person.Address.ZipCode),并将其与MatchValue 进行比较。问题是,MatchValue 可以是很多不同的东西:boolean、int、string、List/array、DateTime 等。

我的第一次尝试是按如下方式创建 GraphQL 类:

    public partial class ShowCriterionQL : ObjectGraphType<ShowCriterion>
    {
        public ShowCriterionQL()
        {
            Field(x => x.RelatedEntity, type: typeof(StringGraphType));
            Field(x => x.MatchValue, type: typeof(ObjectGraphType));
        }
    }

但它给出了以下错误:

GraphQL.Validation.ValidationError: Field matchValue of type ObjectGraphType must have a sub selection

如果我将其设为StringGraphType,它将正确转换一些值(例如,布尔值 true 变为“True”),但我真的不喜欢这种解决方案,因为它需要在客户端进行特殊处理。我还没有探索所有可能的类型,看看数组或 DateTime 会发生什么。

有没有办法在 GraphQL.NET 中做到这一点?

(在搜索中,我找到了一些处理类型参数的资源,但这对我正在做的事情并没有真正的帮助,因为我使用了一个通用对象并在运行时使用反射来确定如何处理特定值。我还发现 this 未回答的问题非常相似......但遗憾的是没有回答。)

【问题讨论】:

标签: c# asp.net-core graphql graphql-dotnet graphql.net


【解决方案1】:

您可以使用 AnyScalarGraphType,但请注意它无法被 graphql 客户端识别,尽管具有它的查询在执行时工作正常。

AnyScalarGraphType : https://github.com/graphql-dotnet/graphql-dotnet/blob/master/src/GraphQL/Utilities/Federation/AnyScalarGraphType.cs

GraphQL 客户端问题:https://github.com/graphql/graphiql/issues/1705

您还可以创建自己的自定义标量类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 2022-01-15
    • 1970-01-01
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多