У меня есть следующая мутация образца:
mutation {
checkoutCreate(input: {
lineItems: [{ variantId: "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80", quantity: 1 }]
}) {
checkout {
id
webUrl
lineItems(first: 5) {
edges {
node {
title
quantity
}
}
}
}
}
}
Я использую .net GraphQL-клиент. Я хотел бы каким-то образом передать список lineItems этому запросу. Я сделал следующее:
mutation {
checkoutCreate(input: {
$lineItems
}) {
checkout {
id
webUrl
lineItems(first: 5) {
edges {
node {
title
quantity
}
}
}
}
}
}
Код С#:
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: Unexpected HttpResponseMessage with code: BadRequest
Есть ли способ сделать это? или мне нужно заменить в строке?
Обновлено:
Я пробовал это (и 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
}
]
}
}





Переменные — это объект, одно значение.
С псевдокодом у вас есть variables = lineItems, но вам нужно variables = { lineItems: lineItems }
В самом запросе нужно объявить переменную и ее тип. В вашем случае это может выглядеть так
mutation CreateCheckout($lineItems: [LineItem!]!) {
checkoutCreate(input: {
$lineItems
}) { ... FieldsFromTheQuestion }
Название операции (CreateCheckout) может быть любым, значимым для вас; в схеме не указано.
Ответ @galkin, вероятно, тоже актуален: когда вы делаете запрос, вам нужно передать список позиций под ключом "input", совпадающим с именем переменной в запросе. необработанный JSON-запрос должен выглядеть примерно так
{
"query": "mutation CreateCheckout ...",
"variables": {
"input": [
{
"variantId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80",
"quantity" 2
}
]
}
}
Благодаря @galkin и @David Maze я решил это так:
mutation checkoutCreate($input: CheckoutCreateInput!) {
checkoutCreate(input: $input) {
checkout {
id
}
checkoutUserErrors {
code
field
message
}
}
}
С# код:
var request = new GraphQLRequest
{
Query = m_resource.Resource.GetString("CheckoutCreate"),
Variables = new
{
input = new
{
LineItems = lineItems // List<LineItem>
}
};