首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么graphql-dotnet会为此模式返回“预期的非空值”错误?

为什么graphql-dotnet会为此模式返回“预期的非空值”错误?
EN

Stack Overflow用户
提问于 2018-12-14 13:13:08
回答 2查看 3K关注 0票数 4

我有一个简单的模式,我尝试按如下方式查询:

代码语言:javascript
复制
{
  subQuery {
    subObjectGraph {
      Name
    }
  }
}

但是"graphiql“抛出了以下错误,甚至看起来都没有运行我的查询。

代码语言:javascript
复制
{
  "errors": [
    {
      "message": "Expected non-null value, resolve delegate return null for \"$Api.Schema.Queries.MySubObjectGraphType\"",
      "extensions": {
        "code": "INVALID_OPERATION"
      }
    }
  ]
}

我的架构(下图)出了什么问题?我刚创建了一个SubObject,所以我不明白为什么错误消息暗示这个值是空的。

代码语言:javascript
复制
    public class Schema: GraphQL.Types.Schema
    {
        public Schema(IDependencyResolver resolver): base(resolver)
        {
            Query = resolver.Resolve<RootQuery>();  
            Mutation = null;
        }
    }

    public class RootQuery: ObjectGraphType
    {
        public RootQuery(IDependencyResolver resolver)
        {
            Name = "Query";

            Field<MySubQuery>(
                name: "subQuery",
                resolve: ctx => resolver.Resolve<MySubQuery>());
        }
    }


    public class MySubQuery: ObjectGraphType
    {
        public MySubQuery()
        {
            Name = "TempSubQuery";

            Field<StringGraphType>("SubQueryName", resolve: ctx => "Some string value");

            Field<MySubObjectGraphType>(
                name: "subObjectGraph",
                resolve: ctx => FetchFromRepo());
        }


        //Repo access would go here, but just new-ing the object for now.
        private SubObject FetchFromRepo()
        {
            return new SubObject() { Name = "some sub object" };
        }
    }


    public class SubObject
    {
        public string Name { get; set; }
    }

    public class MySubObjectGraphType: ObjectGraphType<SubObject>
    {
        public MySubObjectGraphType()
        {
            Name = "MySubObject";
            Description = "An object with leaf nodes";

            Field(l => l.Name);
        }
    }

如果我用StringGraphType替换MySubObjectGraphType,代码就能正常工作,所以问题一定出在MySubObjectGraphType的配置上。

请帮帮忙?我使用的是v2.4。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-20 14:38:41

您需要在Startup.cs中为MySubObjectGraphType添加服务注册

因此,该规则可以描述为“从ObjectGraphType派生的自定义类型必须在某个时刻通过依赖项注入进行注册”

例如,在Startup.cs中:

services.AddSingleton<MySubObjectGraphType>();

票数 9
EN

Stack Overflow用户

发布于 2018-12-15 00:41:00

您将在您的RootQuery中返回subQuery格式的GraphType。解析程序应该只返回DTO,而不能返回GraphTypes。

如果你正在尝试组织你的查询,那么只返回一个空对象。

代码语言:javascript
复制
Field<MySubQuery>(
  name: "subQuery",
  resolve: ctx => new {});

https://graphql-dotnet.github.io/docs/getting-started/query-organization

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53773837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档