0

考虑以下查询;

query {
  droid(id: "123") {
    id
    name
  }
}

像这样使用 GraphQL.net 时,我可以访问服务器上的 id 查询参数;

public class Droid
{
  public string Id { get; set; }
  public string Name { get; set; }
}

public class DroidType : ObjectGraphType
{
  public DroidType()
  {
    Field<NonNullGraphType<IdGraphType>>("id");
    Field<StringGraphType>("name");
  }
}

public class StarWarsQuery : ObjectGraphType
{
  private List<Droid> _droids = new List<Droid>
  {
    new Droid { Id = "123", Name = "R2-D2" }
  };

  public StarWarsQuery()
  {
    Field<DroidType>(
      "droid",
      arguments: new QueryArguments(
        new QueryArgument<IdGraphType> { Name = "id" }
      ),
      resolve: context =>
      {
        var id = context.GetArgument<string>("id");//<---- THIS
        return _droids.FirstOrDefault(x => x.Id == id);
      }
    );
  }
}

但是我将如何处理这样的查询;

query {
  droid(id: "123") {
    id
    name
    owner(id: "456") {
      id
      name
    }
  }
}

这不是一个很好的例子,但我希望创建一个 OwnerType 并向我的 DriodType 添加一个新字段;

public class DroidType : ObjectGraphType
{
  public DroidType()
  {
    Field<NonNullGraphType<IdGraphType>>("id");
    Field<StringGraphType>("name");
    Field<OwnerType>(
      "owner",
      arguments: new QueryArguments(
        new QueryArgument<IdGraphType> { Name = "id" }
      ),
      resolve: context =>
      {
        var id = context.GetArgument<string>("id");
        return _owners.FirstOrDefault(x => x.Id == id);
      }
    );
  }
}

这是我的问题,如果 ID 为 123 的 driod 已被所有者拥有,我只想要 ID 为 456 的所有者。为此,我需要过滤所有者以仅包括拥有 droid 123 的所有者。为此,我需要能够从 DroidType 的所有者字段中访问 droid 的 id,即我想访问StarWarsQuery 中机器人字段的参数值来自 DroidType 上的所有者字段。我该怎么做?

4

1 回答 1

0

所有者字段的解析争论中的上下文具有“来源”属性,它包含有关机器人类型的信息。我能够从那里获得我需要的信息

于 2020-10-03T11:22:03.770 回答