GraphQL Hot Chocolate多Schema配置:如何注册并访问多个Query?
解决Hot Chocolate多Schema端点无法正确加载的问题
看起来你遇到的问题是第二个名为foo的Schema没有被正确关联到/admin/graphql端点,导致访问该地址时仍然加载了默认的Book Schema。以下是具体的解决步骤和原因分析:
问题根源
你当前使用的MapGraphQL(string path, string schemaName)重载可能没有正确地将端点与指定Schema绑定(在某些Hot Chocolate版本中,这个重载的参数优先级或者实现逻辑可能导致Schema关联失效)。
修复方案
将端点映射的代码修改为使用.WithSchema()扩展方法来明确指定Schema,替换原来的重载写法:
// 替换这一行: // app.MapGraphQL("/admin/graphql", schemaName: "foo"); // 改为: app.MapGraphQL("/admin/graphql").WithSchema("foo");
修改后的完整启动代码片段:
var app = builder.Build(); app.MapGraphQL(); // 默认端点绑定默认Schema app.MapGraphQL("/admin/graphql").WithSchema("foo"); // 明确指定端点绑定"foo"Schema app.MapGet("/health", () => { return new OkResult(); }); app.Run();
额外验证步骤
为了确保fooSchema已经被正确注册,可以在启动代码中添加一段调试代码,检查已注册的Schema列表:
var app = builder.Build(); // 添加这段代码验证Schema注册情况 var schemaRegistry = app.Services.GetRequiredService<ISchemaRegistry>(); foreach (var schemaName in schemaRegistry.GetSchemaNames()) { Console.WriteLine($"已注册Schema:{schemaName}"); } app.MapGraphQL(); app.MapGraphQL("/admin/graphql").WithSchema("foo"); app.MapGet("/health", () => new OkResult()); app.Run();
启动项目后,查看控制台输出,如果能看到已注册Schema:foo和已注册Schema:default,说明两个Schema都成功注册了。
测试查询
修复后,访问https://localhost:7058/admin/graphql,应该能看到Movie相关的查询字段。你可以在Playground中执行以下查询来验证:
query { movies { name } }
注意:Hot Chocolate默认会将C#方法名GetMovies转换为GraphQL字段名movies(去掉前缀Get并转为小驼峰),所以查询时要使用movies而不是GetMovies。
内容的提问来源于stack exchange,提问作者Dr Schizo
相关产品推荐
相关产品推荐

