You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 18:04:09