Как передать коллекцию в мутацию GraphQL с GraphQL.Net и c #? - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь создать мутацию, которая принимает коллекцию. Сервер GraphQL написан на ядре c # .net и использует GraphQL.Net.

Это мой тип ввода;

public class PupilReportInputType : InputObjectGraphType<PupilReport>
{
    public PupilReportInputType()
    {
        Name = "PupilReportInput";
        Field(pr => pr.PupilId);
        Field(pr => pr.PupilMetricCollections, type: typeof(ListGraphType<PupilMetricCollectionInputType>));
    }
}

Используя GraphiQL, я попытался опубликовать следующую мутацию;

mutation getPupilReportText($pupilReport: PupilReportInput!) {
  getPupilReportText(pupilReport: $pupilReport)
}

со следующей переменной;

{
  "pupilReport": {
    "pupilId" : 5,
    "pupilMetricCollections": {
      "pupilMetricCollection" : {
         "pupilId" : 5
      }
    }
  }
}

Я получаю ответ:

{
  "errors": [
    {
      "message": "Variable '$pupilReport.pupilMetricCollections[0]' is invalid. Unable to parse input as a 'PlayerMetricCollectionInput' type. Did you provide a List or Scalar value accidentally?",
      "extensions": {
        "code": "INVALID_VALUE"
      }
    }
  ]
}

Если в PupilReportInputType удалено поле PupilMetricCollections и переменные мутации скорректированы аналогично, тогда запрос ведет себя как ожидалось (не ошибки). Точно так же, если я изменю переменную input и PupilReportInputType так, чтобы поле было просто PupilMetricCollectionInputType, а не ListGraphType<PupilMetricCollectionInputType>, тогда я смогу заставить все это работать.

Как передать коллекцию на PupilMetricCollectionInputType? Нужен ли мне какой-нибудь ListGraphInputType?

1 Ответ

0 голосов
/ 01 мая 2019

Я был новичком в GraphQL и поэтому предполагал, что ошибка, которую я сделал, была в моем коде. По правде говоря, ответное сообщение, которое я получал, давало мне всю необходимую информацию; переменные данные, которые я отправлял, действительно были искажены.

Я отправил это;

{
  "pupilReport": {
    "pupilId" : 5,
    "pupilMetricCollections": {
      "pupilMetricCollection" : {
         "pupilId" : 5
      }
    }
  }
}

Однако pupilMetricCollections является типом массива; поэтому мне нужно было использовать синтаксис массива. Следующее работало нормально;

{
  "pupilReport": {
    "pupilId" : 5,
    "pupilMetricCollections": [
      {
        "pupilId" : 1
      },
      {
        "pupilId" : 2
      }
    ]
  }
}

Мой большой вывод здесь - доверять ответам об ошибках GraphQL и не забывать искать очевидное!

...