考虑下面的查询;
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的所有者。要做到这一点,我需要过滤所有者,只包括那些拥有droid123的所有者。为此,我需要能够从DroidType的owner字段中访问droid的id,即我希望从DroidType上的owner字段访问StarWarsQuery中的droid字段的参数值。我该怎么做呢?
发布于 2020-10-03 19:22:04
owner字段的resolve参数中的上下文有一个"Source“属性,该属性保存了droid类型的信息。我从那里得到了我需要的信息。
https://stackoverflow.com/questions/64159896
复制相似问题