У меня GraphQL работает на локальном хосте (http: // localhost: 23061 / graphql), и я пытаюсь воспроизвести запрос, который я делаю в пользовательском интерфейсе, напрямую, но в C#. Я заранее проверил правильность пакета JSON на почтальоне, но всякий раз, когда такой пакет пытается выполнить на C#, он просто возвращает ошибку 500, я пробовал довольно много вариантов этого пакета (поменяв местами "на" в качестве примера), но, к сожалению, все одно и тоже.
Итак, запрос, который я использовал для почтальона, выглядит так: {"query": "{goldBalance (address:" 0xa49d64c31A2594e8Fb452238C9a03beFD1119963 ")}"} он отлично подходит для почтальона.
Однако при переносе этого на C#;
static async System.Threading.Tasks.Task Main(string[] args)
{
var httpClient = new HttpClient();
var url = "http://localhost:23061/graphql";
var data = "{ \"query\":\"{goldBalance(address: \"0xa49d64c31A2594e8Fb452238C9a03beFD1119963\")}\"}";
var content = new StringContent(data.ToString(), Encoding.UTF8, "application/json");
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var result = httpClient.PostAsync(url, content).Result;
Console.WriteLine(result);
}
Когда это запущено, оно всегда будет возвращаться;
StatusCode: 500, ReasonPhrase: 'Internal Server Error', Version: 1.1, Content: System.Net.Http.HttpConnectionResponseContent, Headers:
{
Date: Tue, 30 Mar 2021 20:18:36 GMT
Server: Kestrel
Content-Length: 0
}
Сначала я подумал, что это может быть проблема HTTPClient, а не WebRequest, так что это явно проблема с моей отправкой куда-то.
Ого, я так не знал, что Почтальон может создавать фрагменты кода. Я буквально потратил на это 2 вечера. Огромное спасибо.
Я рад, что смог помочь. Удачи!





Благодаря Ханлету в Postman есть раздел фрагментов кода, в котором буквально есть решение. Оценил.
Я также теперь понял, в чем проблема, я не удвоил адрес. Спасибо.
используйте инструмент JSONing вместо жесткого кодирования / манипуляции строк (stackoverflow.com/a/61882664/6124657), следующим шагом будет использование переменных graphql.org/learn/queries/#variables, чтобы сделать его динамическим
Спасибо, на самом деле это то, что я планировал попробовать завтра.
Вот что я получаю, используя аналогичный запрос с Postman:
var client = new RestClient("http://localhost:23061/graphql");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Basic Og= = ");
request.AddHeader("Content-Type", "text/plain");
request.AddParameter("text/plain", "{\"query\":\"{goldBalance(address: \"0xa49d64c31A2594e8Fb452238C9a03beFD1119963\")}\"}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
Попробуйте использовать это вместо HttpClient.
Вы пробовали получить фрагмент кода напрямую от почтальона? Когда я делаю это с почтальоном, он использует объект
RestClientвместо HttpClient. Попробуйте.