C#如何实现GraphQL接口 HotChocolate GraphQL框架教程


用 HotChocolate 实现 GraphQL 接口需四步:1. 创建 ASP.NET Core 项目并安装 HotChocolate.AspNetCore 等包;2. 用代码优先方式定义 Object Type(如 BookType);3. 编写 Query 类并注册为根查询类型;4. 在中间件中调用 MapGraphQL() 启用 /graphql 端点。

用 HotChocolate 实现 GraphQL 接口在 C# 中非常直观,核心是定义类型、编写解析器、注册服务并启用中间件。不需要手写 HTTP 路由或序列化逻辑,框架自动处理查询解析、字段执行和错误响应。

1. 创建基础项目并安装 HotChocolate

新建一个 ASP.NET Core Web API 项目(.NET 6+ 推荐),通过 NuGet 安装关键包:

  • HotChocolate.AspNetCore(提供服务器中间件)
  • HotChocolate.Types(用于定义 Schema 类型)
  • 可选:HotChocolate.Data(简化 EF Core 集成)

安装命令示例:

dotnet add package HotChocolate.AspNetCore

2. 定义 GraphQL 类型(Object Type)

HotChocolate 支持代码优先(Code-First)方式。比如有一个 C# 模型:

public class Book { public Guid Id { get; set; } public string Title { get; set; } public string Author { get; set; } }

对应定义 GraphQL 类型:

public class BookType : ObjectType { protected override void Configure(IObjectTypeDescriptor descriptor) { descriptor.Field(x => x.Title).Description("书名"); descriptor.Field(x => x.Author).Description("作者"); } }

3. 编写 Query 类与解析器

创建一个普通类,用 [GraphQLName("Query")] 标记,并添加返回数据的方法:

public class Query { public IEnumerable GetBooks() => new[] { new Book { Id = Guid.NewGuid(), Title = "C# 编程入门", Author = "张三" } }; }

在 Program.cs 中注册它为根查询类型:

services.AddGraphQLServer().AddQueryType().AddType();

4. 启用 GraphQL 端点

在 Program.cs 的中间件管道中添加:

app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapGraphQL(); });

默认端点是 /graphql,支持 GraphiQL(开发时自动启用)——访问 https://www./link/c3a5d96180f4811f93e797bb2bca08ee 即可调试。

基本上就这些。进阶可用 DataLoader 避免 N+1 查询,加 Mutation 支持修改操作,或集成 EF Core 自动映射数据库表。不复杂但容易忽略的是:确保所有公开字段都有 getter,且类型注册顺序合理(如 Query 依赖的类型要先注册)。


# app  # 路由  # c#  # .net  # graphql  # 中间件  # String  # Object  # void  # 接口  # class  # public  # protected  # 数据库  # http  # 并安装  # 的是  # 进阶  # 都有  # 不需要  # 可选  # 要先  # 一个普通  # 它为  # 新建一个 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  如何在同包不同文件中正确引用 Go 结构体  Win11怎么设置闹钟_Windows 11时钟应用闹钟设置指南【详解】  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  如何用正则表达式精确匹配“start”到“end”之间最多含一个换行符的文本段  Django密码修改后会话失效的解决方案  如何使用正则表达式提取以编号开头、后跟多个注解的完整代码块  Win11怎么看电池循环次数_Win11笔记本电池寿命检测【命令】  Win11麦克风没声音怎么设置_Win11麦克风权限及驱动修复【教程】  如何在 Python 测试中动态配置 @backoff 装饰器的重试次数  Win11如何设置系统声音_Win11系统声音调整教程【攻略】  Win11怎么开启专注模式_Windows11时钟应用Focus Session  Win11怎样安装剪映专业版_Win11安装剪映教程【步骤】  如何从 Go 的 map[string]interface{} 中安全获取值  Python深度学习实战教程_神经网络模型构建与训练  如何使用Golang实现文件加密_Golang crypto 文件加密示例  php订单日志怎么按状态筛选_php筛选不同状态订单日志教程【教程】  c++中explicit(bool)的用法 c++条件性explicit【C++20】  如何使用Golang实现容器自动化运维_Golang Docker运维管理方法  如何在Golang中编写端到端测试_Golang E2E测试流程示例  Python面向对象实战讲解_类与设计模式深入理解  如何在Golang中使用container/heap实现堆_Golang container/heap最小堆方法  如何优化Golang程序CPU性能_Golang CPU密集型任务优化方法  如何在Golang中处理通道发送接收错误_防止阻塞或panic  Win11怎么格式化U盘_Win11系统U盘格式化与文件系统选择【教程】  php订单日志怎么导出excel_php导出订单日志到表格教程【教程】  Win11怎么关闭防火墙通知_屏蔽Win11安全中心安全警告弹窗【技巧】  Win11系统更新后黑屏怎么办 Win11更新黑屏修复教程【方法】  windows如何修改文件默认打开方式_windows设置程序关联教程  零基础学会Python自动化办公_高效处理Excel与PDF文档  Windows的便笺功能如何使用?(桌面备忘技巧)  php本地部署后数据库连接报错_1045accessdenied错误解决方法详解【汇总】  如何使用正则表达式批量替换重复的星号-短横模式为固定字符串  LINUX下如何配置VLAN虚拟局域网_在LINUX交换机与服务器上的实现  WindowsUSB驱动安装异常怎么办_USB驱动重建与恢复教程  Windows10如何查看保存的WiFi密码_Win10命令行netsh wlan查询  PHP接收参数值为空怎么办_判断和处理空参数方法说明【说明】  Win11怎样彻底卸载自带应用_Win11彻底卸载自带应用方法【步骤】  Win11怎么更改鼠标指针_Windows 11自定义鼠标样式与大小【美化】  Win11如何更改任务栏颜色 Win11自定义任务栏背景色【美化】  Windows10系统怎么查看防火墙状态_Win10安全中心网络保护  如何使用Golang reflect检查方法数量_动态分析类型方法  Python异步网络编程_aiohttp说明【指导】  如何在Golang中使用encoding/gob序列化对象_存储和传输数据  Python对象比较排序规则_集合使用说明【指导】  C++如何获取CPU核心数?(std::thread::hardware_concurrency)  Win11怎么设置快速访问主页_Windows11资源管理器文件夹选项  Python技术债务管理_长期维护解析【教程】  如何在Golang中实现微服务负载均衡_Golang负载均衡策略与实现示例  VSC怎样用终端运行PHP_命令行执行脚本的步骤【教程】 

 2025-12-29

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.