Проблема с самоанализом 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;
}