Graphql .Net核心3.1+;图形ql==>&引用;错误";:&引用;JSON输入意外结束“;
我开发了一个.net core 3.1 web API,并在其中添加了GraphQL和游乐场。当我试图启动操场时,我遇到了这个让我厌烦的错误。我在谷歌上搜索了太多次,我读了很多关于它的文章和论坛,我尝试了他们建议的方法,但问题仍然存在。另外,我应该说我对.NETCore2.2没有这个问题 我决定简化我的解决方案,去掉项目中多余的枝叶,然后上传给你,你可以帮助我。 我目前正在做的那个项目的简化版本已经发布了。Graphql .Net核心3.1+;图形ql==>&引用;错误";:&引用;JSON输入意外结束“;,graphql,.net-core-3.1,graphql-playground,Graphql,.net Core 3.1,Graphql Playground,我开发了一个.net core 3.1 web API,并在其中添加了GraphQL和游乐场。当我试图启动操场时,我遇到了这个让我厌烦的错误。我在谷歌上搜索了太多次,我读了很多关于它的文章和论坛,我尝试了他们建议的方法,但问题仍然存在。另外,我应该说我对.NETCore2.2没有这个问题 我决定简化我的解决方案,去掉项目中多余的枝叶,然后上传给你,你可以帮助我。 我目前正在做的那个项目的简化版本已经发布了。 此外,我还找到了一个使用.net core 3.1的解决方案,该解决方案没有这个问题,
此外,我还找到了一个使用.net core 3.1的解决方案,该解决方案没有这个问题,但仍然找不到我的错误。我已经上传了这个正确的解决方案 在这个简化版本中,我没有连接到数据库,也没有向项目中添加任何相关的包。我返回这个简化版本的内存数据,而不是联系数据库 这是我面临的错误的图片: 简化项目的.csproj文件如下:
netcoreapp3.1
NetCore3._1GraphQL
在startup.cs中添加
public void ConfigureServices(IServiceCollection services)
{
//add this
services.AddSingleton<MyAppSchema>();
}
public void配置服务(IServiceCollection服务)
{
//加上这个
services.AddSingleton();
}
根据简化且错误的项目afaict,它配置了一个路由,该路由将/graphql
端点映射到控制器,但不包含匹配的控制器。因此,服务器返回404响应,graphql游乐场生成错误消息。添加控制器(或中间件)使其工作
以下是对简化且错误的项目所做的更改,这些更改使该项目得以运行:
/graphql
路由匹配的api控制器//GraphqlController.cs
//省略using语句
命名空间NetCore3.\u 1GraphQL.Controllers
{
[ApiController]
[路线(“[控制器]”)]
公共类GraphqlController:ControllerBase
{
专用只读服务器ViceProvider(提供程序);
私有只读IDocumentExecuter\u executer;
专用只读IDataLoaderContextAccessor\u加载程序;
公共图形控制器(
i文档执行器执行器,
IServiceProvider提供程序,
IDataLoaderContextAccessor加载程序)
{
_执行者=执行者;
_提供者=提供者;
_装载机=装载机;
}
[HttpPost]
公共异步任务Post([FromBody]GraphQLRequest GraphQLRequest)
{
if(graphQLRequest==null)
{
抛出新ArgumentNullException(nameof(graphQLRequest));
}
var\u query=graphQLRequest.query;
var_inputs=graphQLRequest.Variables?.ToObject();
var\u options=新的执行选项
{
Schema=新的GraphQLSchema(_提供程序)
{
Query=newgraphqlquery(_加载器),
},
查询=\u查询,
输入=_输入,
FieldNameConverter=新的PascalCaseFieldNameConverter()
};
尝试
{
var result=await _executer.ExecuteAsync(_选项).ConfigureAwait(false);
如果(结果错误?.Count>0)
{
返回请求(结果);
}
返回Ok(结果);
}
捕获(例外情况除外)
{
返回请求(ex);
}
}
}
}
BaseGraphQLQuery.cs
中的行publicjobject变量{get;set;}
BaseGraphQLQuery
类是GraphQL请求的实现,而不是GraphQL查询。将其重命名为GraphQLRequest
,或将控制器post操作中的参数名称更改为BaseGraphQLQuery
谢谢@moustapha。我现在很忙,但我会尽快检查你的答案。我检查了你的答案,你是对的。一年前,当我从互联网上下载这个项目时,我是GraphQL的初学者,不知道必须有一个控制器来处理GraphQL请求。但让我们在你的答案中添加这一点,以便更好地为其他读者解答这个问题。更改第76行中应用程序使用GraphQlPlayerly工具的位置,如下所示:
app.usegraphQlPlayerly(选项:新建GraphQLPlaygroundOptions(){Path=“/GraphQlPlayerly”,GraphQLEndPoint=“/graphql”})代码>此时将显示操场