簡體   English   中英

在 c# 中使用 GraphQL.Net 時,如何訪問 GraphQL 字段中的參數值?

[英]How do I access the argument values in GraphQL fields when using GraphQL.Net with c#?

考慮以下查詢;

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 的 drood 已被他們擁有,我只想要 ID 為 456 的所有者。 為此,我需要過濾所有者以僅包含擁有 droid 123 的所有者。為此,我需要能夠從 DroidType 的所有者字段中訪問機器人的 id,即我想要訪問StarWarsQuery 中 droid 字段的參數值來自 DroidType 上的 owner 字段。 我該怎么做?

所有者字段的解析論證中的上下文有一個“源”屬性,它包含有關機器人類型的信息。 我能夠從那里獲得我需要的信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM