在GraphQL参数化查询中使用ID

在GraphQL参数化查询中使用ID,graphql,apollo,grandstack,Graphql,Apollo,Grandstack,我有以下模式: type Post { id: ID! text: String } 我使用的是来自neo4j graphql.js的自动生成突变,因此我可以访问以下突变: UpdatePost( id: ID! text: String ): Post 问题: 当我使用以下查询时: mutation update($id: String, $text: String) { UpdatePost(id: $id, text: $text) { id text

我有以下模式:

type Post {
  id: ID!
  text: String
}
我使用的是来自
neo4j graphql.js
的自动生成突变,因此我可以访问以下突变:

UpdatePost(
id: ID!
text: String
): Post
问题:

当我使用以下查询时:

mutation update($id: String, $text: String) {
  UpdatePost(id: $id, text: $text) {
    id
    text
  }
}
使用以下参数:

{
  "id": "a19289b3-a191-46e2-9912-5a3d1b067cb2",
  "text": "text"
}
我得到以下错误:

{
  "error": {
    "errors": [
      {
        "message": "Variable \"$id\" of type \"String\" used in position expecting type \"ID!\".",
        "locations": [
          {
            "line": 1,
            "column": 17
          },
          {
            "line": 2,
            "column": 18
          }
        ],
        "extensions": {
          "code": "GRAPHQL_VALIDATION_FAILED"
        }
      }
    ]
  }
}

有没有办法将我的字符串ID转换为实际的ID类型?或者完全绕过此错误?

您看到的错误与查询的变量定义中指定的变量类型有关。它与变量的值(看起来是正确的)无关。根据错误消息,
$id
变量的类型是
String
,而不是粘贴的查询中显示的
id

无论如何,因为
id
参数的类型(使用
$id
变量的地方)是
id
,而不是
ID
,那么变量的类型也应该是
ID

表示非空(必需)类型。换句话说,必须始终提供
id
参数,并且不能为其指定值
null
。传递给参数的任何变量也必须为非null。如果变量的类型是
ID
而不是
ID
,我们告诉GraphQL变量可能被省略或有一个
null
值,这与使用它的参数不兼容


请注意,相反的情况并非如此:如果参数的类型为
ID
,则为
ID
ID变量将是有效的。

如果其他人正在寻找答案,下面是几个如何在C#中使用ID变量的示例:

var请求=新的GraphQLRequest
{
查询=@“
查询getToken($tokenId:ID!){{
令牌(其中:{id:$tokenId}}orderBy:decimals,orderDirection:desc){{
身份证件
符号
名称
}}
}},Variables=new
{
令牌ID=“”
}
};
和使用列表:

querygettoken($tokenIds:[ID!)){{
令牌(其中:{id_in:$tokenIds}}orderBy:decimals,orderDirection:desc){{
身份证件
符号
名称
}}
}},Variables=new
{
tokenIds=newarraylist()
}

我理解这一点,但如何将此类字符串设置为ID?我使用查询字段时返回的确切值。您不会将字符串“转换”为ID。ID标量只接受字符串(和整数)作为中概述的有效值。如果在修复变量定义后仍看到错误,请重新检查它是否确实是同一个错误。粘贴的错误与粘贴的查询不匹配。错误消息与匹配。我已从架构中清除了不相关的字段。>如果在修复变量定义后仍看到错误,请定义这正是我问题的重点…我如何修复变量定义?我问题中的值正是查询我要修改的对象时返回的值。而且,当我不使用参数化查询时,这不会出现将突变定义更改为突变更新($id:id!