【问题标题】:Creating GraphQL mutation创建 GraphQL 突变
【发布时间】:2019-07-26 07:37:07
【问题描述】:

我有以下样本突变:

mutation {
  checkoutCreate(input: {
    lineItems: [{ variantId: "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80", quantity: 1 }]
  }) {
    checkout {
       id
       webUrl
       lineItems(first: 5) {
         edges {
           node {
             title
             quantity
           }
         }
       }
    }
  }
}

我正在使用 .net GraphQL client。我想以某种方式将 lineItems 列表传递给此查询。我做了以下事情:

mutation {
  checkoutCreate(input: {
    $lineItems
  }) {
    checkout {
       id
       webUrl
       lineItems(first: 5) {
         edges {
           node {
             title
             quantity
           }
         }
       }
    }
  }
}

C#代码:

    dynamic lineItems = new List<dynamic>
    {
        new
        {
            variantId = "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80",
            quantity = 2
        }
    };

    var request = new GraphQLRequest
    {
        Query = m_resource.Resource.GetString("CheckoutCreate"), // Gets from resource file the above string
        Variables = lineItems 
    };

    var response = await m_client.PostAsync(request);

我不断得到:

GraphQLHttpException:意外的 HttpResponseMessage 代码: 错误请求

有没有办法做到这一点?还是我必须在字符串中替换?

编辑:

我已经尝试过这个(以及其他 20 种方法,但仍然出现错误)。我要做的就是传入一个 LineItems 列表。

mutation CreateCheckout($input: LineItemsInput!) {
  checkoutCreate(input: $input) {
    checkout {
       id
       webUrl
       lineItems(first: 5) {
         edges {
           node {
             title
             quantity
           }
         }
       }
    }
  }
}

        var request = new GraphQLRequest
        {
            Query = m_resource.Resource.GetString("CheckoutCreate"),
            Variables = new
            {
                LineItemsInput = new List<dynamic>
                    {
                        new
                        {
                            variantId = "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80",
                            quantity = 2
                        }
                    }
            }
        };

Json 请求如下所示:

{
  "Query": "mutation CreateCheckout($input: LineItemsInput!) {\r\n  checkoutCreate(input: $input) {\r\n    checkout {\r\n       id\r\n       webUrl\r\n       lineItems(first: 5) {\r\n         edges {\r\n           node {\r\n             title\r\n             quantity\r\n           }\r\n         }\r\n       }\r\n    }\r\n  }\r\n}",
  "OperationName": null,
  "Variables": {
    "LineItemsInput": [
      {
        "variantId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80",
        "quantity": 2
      }
    ]
  }
}

【问题讨论】:

    标签: c# .net graphql github-graphql


    【解决方案1】:

    变量是一个对象,一个单一的值。

    使用伪代码,你有variables = lineItems,但你需要variables = { lineItems: lineItems }

    【讨论】:

      【解决方案2】:

      在查询本身中,您需要declare the variable and its type。在您的情况下,这可能看起来像

      mutation CreateCheckout($lineItems: [LineItem!]!) {
        checkoutCreate(input: {
          $lineItems
        }) { ... FieldsFromTheQuestion }
      

      操作的名称 (CreateCheckout) 可以是任何对您有意义的名称;它没有在架构中指定。

      @galkin 的回答也可能是相关的:当您提出请求时,您需要传递键 "input" 下的行项目列表,匹配查询中的变量名称。 raw JSON request 应该类似于

      {
        "query": "mutation CreateCheckout ...",
        "variables": {
          "input": [
            {
              "variantId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80",
              "quantity" 2
            }
          ]
        }
      }
      

      【讨论】:

        【解决方案3】:

        感谢@galkin 和@David Maze,我这样解决了:

        mutation checkoutCreate($input: CheckoutCreateInput!) {
          checkoutCreate(input: $input) {
            checkout {
              id
            }
            checkoutUserErrors {
              code
              field
              message
            }
          }
        }
        

        c#代码:

                    var request = new GraphQLRequest
                    {
                        Query = m_resource.Resource.GetString("CheckoutCreate"),
                        Variables = new
                        {
                            input = new
                            {
                                LineItems = lineItems // List<LineItem>
                            }
                    };
        

        【讨论】:

          猜你喜欢
          • 2019-11-21
          • 2018-09-19
          • 2021-11-24
          • 1970-01-01
          • 2022-10-23
          • 2019-01-31
          • 2018-01-12
          • 2020-07-15
          • 2018-09-22
          相关资源
          最近更新 更多