.NET Core/5中GraphQL遇JsonException及Schema文档无法识别问题
问题分析与解决方案
我帮你排查了一下,核心问题和对应的解决步骤如下:
1. 类型命名冲突(最关键的问题)
你定义的Task类和.NET框架内置的System.Threading.Tasks.Task完全重名了!这会导致编译器、GraphQL类型解析器以及Json序列化器都出现混淆,直接引发System.Text.Json.JsonException,同时也会干扰Schema的生成,让GraphiQL无法正确识别。
解决方法:
给你的Task类重命名,比如改成AppTask或者TodoTask,同时对应的TaskType也要同步修改:
// 重命名实体类 public sealed class AppTask { public Guid Id { get; set; } } // 同步修改Graph类型 public sealed class AppTaskType : ObjectGraphType<AppTask> { public AppTaskType() { Name = nameof(AppTask); Field(task => task.Id).Description("The task id."); } }
之后更新Query类和Schema中所有引用Task的地方,确保类型引用正确。
2. 确认GraphQL Schema的正确注册
确保你的GraphQLSchema实现正确包含了Query类型,并且在依赖注入中正确注册:
public class AppSchema : GraphQL.Types.Schema { public AppSchema(IServiceProvider provider) : base(provider) { Query = provider.GetRequiredService<AppQuery>(); } } // 在ConfigureServices中注册 services.AddSingleton<AppSchema>(); services.AddGraphQL(options => { options.EnableMetrics = true; }) .AddSystemTextJson();
3. 检查GraphiQL端点配置
确保在Configure方法中正确映射GraphiQL的端点,让它能访问到Schema:
app.UseGraphiQL("/graphiql", options => { options.GraphQLEndPoint = "/graphql"; });
同时确认/graphql端点已经正确配置,能处理GraphQL请求。
4. 验证Json序列化配置
使用GraphQL.SystemTextJson时,需要确保序列化器正确处理GraphQL的类型。在注册服务时,AddSystemTextJson()会自动配置,但如果有自定义Json设置,要避免覆盖GraphQL所需的转换器:
services.AddGraphQL(options => { options.EnableMetrics = true; }) .AddSystemTextJson(options => { // 可以在这里添加自定义配置,但保留GraphQL默认转换器 options.SerializerOptions.PropertyNameCaseInsensitive = true; });
按照以上步骤修改后,应该能解决JsonException和GraphiQL找不到Schema的问题。
内容的提问来源于stack exchange,提问作者user13755987
相关产品推荐
相关产品推荐

