Я обновил значение Route с [Route ("[controller]")] на [Route ("api / graphql")] для нижеупомянутого GraphQLController.
[Route("api/graphql")]
public class GraphQLController : Controller
{
private readonly IDocumentExecuter _documentExecuter;
private readonly ISchema _schema;
public GraphQLController(ISchema schema, IDocumentExecuter documentExecuter)
{
_schema = schema;
_documentExecuter = documentExecuter;
}
[HttpPost]
public async Task<IActionResult> Post([FromBody] GraphQLQuery query)
{
if (query == null)
{
throw new ArgumentNullException(nameof(query));
}
if (string.IsNullOrWhiteSpace(query.Query))
{
throw new ExecutionError("A query is required.");
}
var inputs = query.Variables.ToInputs();
var executionOptions = new ExecutionOptions{Schema = _schema, Query = query.Query, Inputs = inputs};
var result = await _documentExecuter.ExecuteAsync(executionOptions).ConfigureAwait(false);
if (result.Errors?.Count > 0)
{
return BadRequest(result);
}
return Ok(result);
}
}
Здесь идет запуск.cs, который имеет код для Graphiql: //Startup.cs
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration
{
get;
}
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
//services.AddDbContext<NHLStatsContext>(options => options.UseSqlServer(Configuration["ConnectionStrings:NHLStatsDb"]));
services.AddDbContext<NHLStatsContext>(options => options.UseSqlServer(Configuration.GetConnectionString("NHLStatsDb")));
services.AddTransient<IPlayerRepository, PlayerRepository>();
services.AddTransient<ISkaterStatisticRepository, SkaterStatisticRepository>();
services.AddSingleton<IDocumentExecuter, DocumentExecuter>();
services.AddSingleton<NHLStatsQuery>();
services.AddSingleton<NHLStatsMutation>();
services.AddSingleton<PlayerType>();
services.AddSingleton<PlayerInputType>();
services.AddSingleton<SkaterStatisticType>();
var sp = services.BuildServiceProvider();
services.AddSingleton<ISchema>(new NHLStatsSchema(new FuncDependencyResolver(type => sp.GetService(type))));
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, NHLStatsContext db)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseGraphiQl();
app.UseMvc();
db.EnsureSeedData();
}
}
С этими изменениями я выполнил APIServer, а затем перешел по URL: http://localhost:49915/api/graphql и нашел ошибку с сообщением:Эта локальная страница не может быть найдена
Если я пытаюсь открыть URL: http://localhost:49915/graphql,, он открывает редактор Graphiql, но схема отсутствует в левой части редактора Graphiql.
Может кто-нибудь помочь мне решить эту проблему?