Проблема с самоанализом GraphQL Asp Core Web Api Controller

Я не могу увидеть схему моего GraphQL Graph. Ретроспекция не работает, когда я использую контроллер Web Api GraphQL в качестве конечной точки.

Я в настоящее время пробовал с GraphiQl и библиотекой UI.Playground

[Route("graphql")]
[ApiController]
public class GraphQLController : ControllerBase

Я ожидаю увидеть схему и типы, используя ретроспективу, предоставляемую библиотекой GraphQL.NET, но, к сожалению, не вижу. В настоящее время я использую Insomnia Client, который выбирает схему, но GraphiQL и GraphQL.Server.Ui.Playground не могут выполнить эту работу.
Я использую GraphQL.NET 2.4.0 от Джо МакБрайда

    [HttpPost]
    public async Task<IActionResult> PostAsync([FromBody]GraphQLQuery query)

где

public class GraphQLQuery
    {
        public string OperationName { get; set; }
        public string NamedQuery { get; set; }
        public string Query { get; set; }
        public Newtonsoft.Json.Linq.JObject Variables { get; set; }
    }

И образ бесконечной загрузки

0 ответов

Может опоздать на вечеринку, но вот возможное решение для.NET Core 3.0 Web API.

Исправьте CORS и добавьте конечную точку GQL по умолчанию в Startup.cs

public void ConfigureServices(IServiceCollection services)
{
  services
    .AddGraphQL(o => o.ExposeExceptions = true)
    .AddGraphTypes(ServiceLifetime.Scoped);
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
  app.UseDeveloperExceptionPage();
  app.UseCors(o => o.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());  // CORS settings
  app.UseRouting();
  app.UseEndpoints(o => o.MapControllers());

  app.UseGraphQLPlayground(new GraphQLPlaygroundOptions 
  { 
    GraphQLEndPoint = "/services/queries/groups"  // default GraphQL endpoint  
  });
}

Если игровая площадка GQL все еще не попадает в ваш контроллер, попробуйте динамический параметр

[HttpPost]
[Route("services/queries/groups")]
public async Task<dynamic> Items([FromBody] dynamic queryParams)
{
  var schema = new Schema
  {
    Query = new GroupsQuery() // create query and populate it from dynamic queryParams
  };

  var response = await schema.ExecuteAsync(o =>
  {
    //o.Inputs = queryParams.variables;
    o.Query = queryParams.query;
    o.OperationName = queryParams.operationName;
    o.UserContext = new Dictionary<string, dynamic>();
    o.ValidationRules = DocumentValidator.CoreRules;
    o.ExposeExceptions = true;
    o.EnableMetrics = true;
  });

  return response;
}
Другие вопросы по тегам