hotchocolate 12+ 必须安装 hotchocolate.aspnetcore 并用 addgraphqlserver() 注册,minimal hosting 需 mapgraphql();c# 类型需 public 属性或标注特性;参数须显式绑定如 [fromquery];introspection 空因命名策略或被禁用;n+1 问题需日志排查。

HotChocolate 12+ 在 ASP.NET Core 6/7/8 中注册失败?
默认用 AddGraphQLServer() 却提示找不到方法,是因为 HotChocolate 12 起彻底移除了旧版 AddGraphQL() 扩展,必须显式引用 HotChocolate.AspNetCore 包,且注册方式变了。
- 确认已安装
HotChocolate.AspNetCore(不是仅HotChocolate) - Program.cs 中改用
AddGraphQLServer()+AddQueryType(),不能漏掉AddRouting() - 若用 Minimal Hosting 模式(.NET 6+ 默认),必须调用
MapGraphQL()显式挂载端点,否则 404 - 常见错误现象:
InvalidOperationException: No service for type 'IRequestExecutorResolver' has been registered,基本就是漏了AddGraphQLServer()
怎么写一个可被 GraphQL 查询的 C# 类型?
HotChocolate 不强制要求 Data Annotations 或继承基类,但字段可见性、命名和返回类型会直接影响 schema 生成。
- public class 的 public 属性自动变成 GraphQL 字段;private/setter 或只读属性不会暴露
- 方法(如
GetOrders())需加[GraphQLName("orders")]或按约定命名(Get<type>()</type>→type),否则不识别为 resolver - 返回
IEnumerable<t></t>或IQueryable<t></t>时,HotChocolate 会自动转成[T!];返回T?则是T(非空需手动标[GraphQLNonNullType]) - 别直接返回
Task<t></t>,用 async resolver 方法即可,框架会自动 await
查询参数传不进去?BindProperty 和 BindFrom 怎么选?
参数绑定失败通常不是代码写错,而是没告诉 HotChocolate “这个参数从哪来”——它默认只从变量(variables)里取,不自动读 URL query string 或 body。
- 要支持 URL 查询参数(如
?name=abc),得在参数上加[FromQuery](ASP.NET Core 原生特性,HotChocolate 尊重它) - 想让某个参数强制从 variables 绑定,用
[GraphQLVariable("input")];想忽略 variables 直接从 resolver 上下文取,用[Service] -
BindProperty是旧版写法(v11 及以前),v12+ 已废弃,统一用参数特性控制来源 - 常见错误现象:
Cannot resolve argument 'filter' of field 'products',大概率是参数没加任何绑定特性,框架不知道去哪找值
为什么 Introspection 查询返回空?或者字段名全变成小写?
这是命名策略(Naming Convention)和权限控制叠加导致的典型表现,不是 schema 没生成成功。
- 默认启用
UseLowerCamelCase(),C# 的ProductName会变成 GraphQL 的productName;如果想保持 PascalCase,注册时去掉该配置 - Introspection 被禁用时,
__schema查询返回空对象——检查是否误配了DisableIntrospection(),或部署环境设置了Environment.IsProduction自动关闭 - 字段不显示也可能因为 resolver 抛了未处理异常,HotChocolate 默认静默 fail(返回 null),开启
IncludeExceptionDetails = true才能看到真实错误 - 别依赖 IDE 自动生成的 schema SDL 文件做测试,它可能缓存旧版本;用 Playground 实时查
__schema { types { name } }最准
真正麻烦的是 resolver 里混用了 Entity Framework 的延迟加载和 HotChocolate 的并发执行——一个字段触发 N+1 查询,另一个字段又在等它完成,容易卡死或超时。这种问题不会报错,只会响应慢,得开 ExecutionOptions.IncludeExceptionDetails 并结合日志看 resolver 调用链。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











