Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# graphql dotnet为什么会回归;预期的非空值“;此架构有错误吗?_C#_Graphql_Graphql Dotnet - Fatal编程技术网

C# graphql dotnet为什么会回归;预期的非空值“;此架构有错误吗?

C# graphql dotnet为什么会回归;预期的非空值“;此架构有错误吗?,c#,graphql,graphql-dotnet,C#,Graphql,Graphql Dotnet,我有一个简单的模式,我试图查询如下: { subQuery { subObjectGraph { Name } } } 但是“graphiql”抛出以下错误,甚至没有运行我的查询 { "errors": [ { "message": "Expected non-null value, resolve delegate return null for \"$Api.Schema.Queries.MySubObjectGraphType\

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

{
  subQuery {
    subObjectGraph {
      Name
    }
  }
}
但是“graphiql”抛出以下错误,甚至没有运行我的查询

{
  "errors": [
    {
      "message": "Expected non-null value, resolve delegate return null for \"$Api.Schema.Queries.MySubObjectGraphType\"",
      "extensions": {
        "code": "INVALID_OPERATION"
      }
    }
  ]
}
我的模式(以下)有什么问题?我刚刚创建了一个子对象,所以我不明白为什么错误消息暗示该值为null

    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);
        }
    }
公共类架构:GraphQL.Types.Schema
{
公共架构(IDependencyResolver解析器):基本(解析器)
{
Query=resolver.Resolve();
突变=空;
}
}
公共类RootQuery:ObjectGraphType
{
公共根查询(IDependencyResolver解析程序)
{
Name=“查询”;
场(
名称:“子查询”,
resolve:ctx=>resolver.resolve());
}
}
公共类MySubQuery:ObjectGraphType
{
公共MySubQuery()
{
Name=“TempSubQuery”;
字段(“SubQueryName”,解析:ctx=>“某些字符串值”);
场(
名称:“子对象图”,
解析:ctx=>FetchFromRepo());
}
//回购访问将转到这里,但现在只需要重新定义对象。
私有子对象FetchFromRepo()
{
返回新的子对象(){Name=“some sub object”};
}
}
公共类子对象
{
公共字符串名称{get;set;}
}
公共类MySubObjectGraphType:ObjectGraphType
{
public MySubObjectGraphType()
{
Name=“MySubObject”;
Description=“具有叶节点的对象”;
字段(l=>l.Name);
}
}
如果我用StringGraphType替换MySubObjectGraphType,代码运行良好,因此问题一定是MySubObjectGraphType的配置


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

您正在根查询的子查询中返回一个GraphType。解析程序应该只返回DTO,而不返回图形类型

如果您试图组织查询,那么只需返回一个空对象

Field<MySubQuery>(
  name: "subQuery",
  resolve: ctx => new {});
字段(
名称:“子查询”,
解析:ctx=>new{});

您需要在
Startup.cs

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

e、 g在
Startup.cs
中:


services.AddSingleton();

谢谢乔,谢谢你提供了一个很棒的图书馆!我试着按照你的建议去改变,但我还是遇到了完全相同的问题。看起来MySubObjectGraphType有问题,但我不知道是什么问题。“FetchFromRepo”方法返回一个Dto,所以我认为它应该映射到graphType而没有问题?这里稍微更新了一下要点:顺便说一下,我正在使用v2.4。