Furion.Pure 动态 API 控制器生成 — 功能与实现原理
动态 API 控制器生成 — 功能与实现原理一、核心功能动态 API 控制器生成是 Furion/JNPF 框架的核心特性之一它允许开发者创建普通的服务类Service无需继承ControllerBase也无需手动写[Route]和[HttpMethod]特性框架会自动将这些服务类转换为完整的 API 控制器。核心价值零配置路由服务类自动注册为 API 接口命名约定驱动方法名前缀自动映射 HTTP 方法自动参数绑定智能识别[FromBody]、[FromRoute]等模块化支持支持外部程序集和插件动态加载二、实现流程1. 服务注册阶段在 [Startup.cs]中调用services.AddControllers().AddDynamicApiControllers();[DynamicApiControllerServiceCollectionExtensions.cs]的核心逻辑步骤操作说明1加载程序集部件将所有项目程序集添加到ApplicationPartManager2注册特性提供器添加DynamicApiControllerFeatureProvider3注册应用模型转换器添加DynamicApiControllerApplicationModelConvention4注册配置选项添加DynamicApiControllerSettingsOptions2. 控制器识别机制[DynamicApiControllerFeatureProvider.cs]继承自ControllerFeatureProvider重写IsController()方法protectedoverrideboolIsController(TypeInfotypeInfo){returnPenetrates.IsApiController(typeInfo);}[Penetrates.cs]中的识别规则internalstaticboolIsApiController(Typetype){// 排除非公开、抽象类、接口、泛型类等if(!type.IsPublic||type.IsAbstract||type.IsInterface||type.IsGenericType)returnfalse;// 识别条件满足任一即可if(typeof(ControllerBase).IsAssignableFrom(type)// 继承 ControllerBase||typeof(IDynamicApiController).IsAssignableFrom(type)// 实现 IDynamicApiController||type.IsDefined(typeof(DynamicApiControllerAttribute))// 贴有 [DynamicApiController] 特性||type.IsDefined(typeof(RouteAttribute)))// 贴有 [Route] 特性{returntrue;}returnfalse;}3. 路由与 HTTP 方法自动生成[DynamicApiControllerApplicationModelConvention.cs]实现了IApplicationModelConvention在 MVC 应用模型构建阶段自动配置HTTP 方法映射规则方法名前缀HTTP 方法Post、Add、Create、Insert、SubmitPOSTGet、Find、Fetch、QueryGETPut、UpdatePUTDelete、Remove、ClearDELETEPatchPATCH路由模板生成逻辑// 默认路由格式{DefaultRoutePrefix}/{Module}/[controller]/[action]// 默认值api/system/userinfo/get三、实际应用示例假设你有一个服务类publicclassUserInfoService{publicUserInfoOutputGetUserInfo(stringuserId){...}publicvoidCreateUser(UserInfoInputinput){...}publicvoidUpdateUser(UserInfoInputinput){...}publicvoidDeleteUser(stringuserId){...}}框架会自动生成以下 APIHTTP 方法路由路径说明GET/api/system/userinfo/userinfo获取用户信息POST/api/system/userinfo创建用户PUT/api/system/userinfo更新用户DELETE/api/system/userinfo删除用户注意默认会移除Service后缀和方法名中的谓词前缀Get/Post等四、配置选项[DynamicApiControllerSettingsOptions.cs]提供了丰富的配置项配置项默认值说明DefaultRoutePrefixapi默认路由前缀DefaultHttpMethodPOST默认 HTTP 方法LowercaseRoutetrue小写路由AbandonControllerAffixesService,Controller等需要移除的控制器后缀AbandonActionAffixesAsync需要移除的方法后缀KeepVerbfalse是否保留方法名中的谓词五、整体架构图┌─────────────────────────────────────────────────────────────┐ │ 应用启动阶段 │ ├─────────────────────────────────────────────────────────────┤ │ 1. AddControllers() │ │ └── 注册 MVC 服务 │ ├─────────────────────────────────────────────────────────────┤ │ 2. AddDynamicApiControllers() │ │ ├── 加载所有程序集到 ApplicationPartManager │ │ ├── 注册 DynamicApiControllerFeatureProvider │ │ └── 注册 DynamicApiControllerApplicationModelConvention │ └─────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ MVC 应用模型构建阶段 │ ├─────────────────────────────────────────────────────────────┤ │ 1. ControllerFeatureProvider.IsController() │ │ └── 扫描所有程序集识别符合条件的类 │ ├─────────────────────────────────────────────────────────────┤ │ 2. DynamicApiControllerApplicationModelConvention.Apply() │ │ ├── 配置控制器名称移除后缀 │ │ ├── 生成路由模板 │ │ ├── 根据方法名前缀映射 HTTP 方法 │ │ ├── 配置参数绑定FromBody/FromRoute │ │ └── 添加统一结果特性 │ └─────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ API 路由注册完成 │ │ (可通过 Swagger 查看) │ └─────────────────────────────────────────────────────────────┘六、总结核心设计思想通过命名约定和应用模型约定将普通服务类自动转换为 API 控制器大幅减少样板代码。关键技术点ASP.NET Core MVC 扩展点利用ControllerFeatureProvider和IApplicationModelConvention两个扩展点反射扫描在应用启动时扫描所有程序集识别符合条件的服务类约定优于配置通过方法名前缀、类名后缀等约定自动生成路由和 HTTP 方法模块化支持支持外部程序集和插件动态加载

相关新闻

深圳成人学历教育机构精选清单:9家靠谱机构深度对比

深圳成人学历教育机构精选清单:9家靠谱机构深度对比

导语 在深圳打拼的在职人员,想要通过成人学历教育提升竞争力、满足积分落户需求或考取职业资格证书,面对市场上众多的教育培训机构,往往不知如何选择。成人学历教育不同于其他消费型服务,涉及到学习周期、费用投入和最终的学历认可…

2026/7/23 16:02:38 阅读更多 →
计算机毕业设计之基于MVC架构科技资讯网站

计算机毕业设计之基于MVC架构科技资讯网站

随着当今社会的发展,时代的进步,各行各业也在发生着变化,互联网已经逐步进入人们的生活。传统的科技资讯,都是通过报纸、杂志等等方式进行了解资讯,这种传统方式局限性比较大且花费较多。网络以及计算机为解决当前的问…

2026/7/23 16:02:38 阅读更多 →
AI如何通过模块化写作与智能文献引擎提升学术效率

AI如何通过模块化写作与智能文献引擎提升学术效率

1. 项目概述:AI如何重塑学术写作体验在高校图书馆通宵赶论文的夜晚,每个学生都幻想过能有个"写作外挂"。去年我在指导本科生论文时发现,90%的学生在文献综述环节就耗费了超过50%的时间,而格式调整这类机械工作又吞噬了剩…

2026/7/23 16:02:38 阅读更多 →

最新新闻

B2B外贸询盘管理白皮书:询盘接收·智能回复·客户跟进全流程

B2B外贸询盘管理白皮书:询盘接收·智能回复·客户跟进全流程

摘要 B2B外贸询盘管理正在经历从"人工驱动"到"AI智能体驱动"的范式转移。据IDC发布的《2026年全球智能客服市场半年报》数据,2026年全球智能客服市场规模预计达186亿美元,年复合增长率58%。与此同时,Gartner 2026年企业采…

2026/7/23 16:11:47 阅读更多 →
企业AI搜索引擎优化选型白皮书:如何选择一家靠谱的GEO服务商

企业AI搜索引擎优化选型白皮书:如何选择一家靠谱的GEO服务商

摘要:本文聚焦企业在AI搜索时代如何系统化评估GEO服务商,从技术自研能力、AI平台覆盖度、数据安全保障、实战案例深度、团队配置与交付模式六大维度构建评估框架,深入剖析选型中常见的六大认知误区并逐一给出避坑指南,结合多家代表…

2026/7/23 16:11:47 阅读更多 →
YOLOv8与CBAM融合提升目标检测性能

YOLOv8与CBAM融合提升目标检测性能

1. YOLOv8与CBAM融合的背景与价值在目标检测领域,YOLO系列算法因其出色的实时性和准确性一直备受关注。YOLOv8作为该系列的最新版本,在速度和精度之间取得了更好的平衡。然而在实际应用中,特别是面对复杂场景和小目标检测时,模型的…

2026/7/23 16:11:47 阅读更多 →
RWKV 一个可并行训练的 RNN

RWKV 一个可并行训练的 RNN

一、开篇:一个可并行训练的 RNN 2021 年前后,一位名叫 Bo Peng(彭博) 的独立研究者开始了一个雄心勃勃的开源项目。他想回答一个看似"反潮流"的问题: 在 Transformer 统治一切的时代,RNN 真的死了吗?能不能造一个既像 Transformer 那样能并行训练,又像 RNN …

2026/7/23 16:11:47 阅读更多 →
BepInEx:Unity游戏Mod开发的标准化插件框架解析与实践

BepInEx:Unity游戏Mod开发的标准化插件框架解析与实践

1. 项目概述:为什么我们需要BepInEx? 如果你是一名Unity游戏玩家,尤其是热衷于《英灵神殿》、《觅长生》、《太吾绘卷》这类由Unity引擎开发的PC游戏,那么你一定对“Mod”这个词不陌生。Mod,即游戏模组,是玩…

2026/7/23 16:11:47 阅读更多 →
AI认知的六个关键维度:从技术到伦理的全面解析

AI认知的六个关键维度:从技术到伦理的全面解析

1. 项目概述:AI认知的六个关键维度"AI的六重真相"这个标题本身就揭示了当前人工智能讨论中普遍存在的认知偏差。从业十年,我发现大众对AI的理解往往停留在两个极端:要么过度神化其能力,要么彻底妖魔化其威胁。实际上&am…

2026/7/23 16:10:47 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 12:54:44 阅读更多 →

月新闻