标签:src 模型 contains rem ret 文档 方法 控制 try
Furion框架亮点之-动态WebAPI
最近研究小僧的.Net5框架Furion,其中不乏让人眼前一亮的新鲜玩意儿。于是想把一些亮点记录并作分享。
相关地址
项目
文档
动态WebAPI简述(摘自文档)
动态WebAPI是Furion框架创造出一种更加灵活创建WebAPI控制器的方式,它对ASP.NET Core WebAPI进行了大量拓展和优化。
具有以下优点:
- 具备原有的ControllerBase所有功能
- 支持任意公开非静态 非抽象 非泛型类转控制器
- 提供更加灵活方便的IDynamicApiController空接口或[DynamicApiController]特性替代ControllerBase抽象类
- 无需手动配置[HttpMethod]特性,同时支持一个动作方法多个HttpVerb
- 无需手动配置[Route]特性,支持更加灵活的配置及自动路由生成
- 支持返回泛型接口,泛型类
- 和Swagger深度结合,提供极其方便的创建Swagger分组配置
- 支持Basic Auth Jwt ApiKey等多种权限灵活配置
- 支持控制器、动作方法版本控制功能
- 支持GET、HEAD请求自动转换 类类型参数
- 支持生成OAS3接口规范
代码与效果
先来看看代码
public class PersonAppService : IDynamicApiController
{
private readonly IRepository<Person> _personRepository;
public PersonAppService(IRepository<Person> personRepository)
{
_personRepository = personRepository;
}
public Person Insert(Person person)
{
var entryEntity = _personRepository.InsertNow(person);
return entryEntity.Entity;
}
public List<Person> GetAll(string keyword)
{
return _personRepository.Where(!string.IsNullOrEmpty(keyword), u => u.Name.Contains(keyword)).ToList();
}
}
仅仅这样,Swagger上已经能显示接口
使用方法
创建一个类继承IDynamicApiController接口 或 贴[DynamicApiController]特性即可。
动态WebAPI配置约定(摘自文档)
控制器默认约定
- 生成控制器名称默认去除以 AppServices,AppService,ApiController,Controller,Services,Service 作为前后缀的字符串。见第一个例子中的 FurAppService -> Furion 支持自定义配置
- 控制器名称带 V[0-9_] 结尾的,会自动生成控制器版本号,如 FurAppServiceV2 -> Furion@2,FurAppServiceV1_1_0 -> Furion@1.1.0。支持版本分隔符配置
- 控制名称以 骆驼命名(CamelCase) 会自动切割成多个单词 - 连接。支持自定义配置
动作方法默认约定
- 生成的动作方法名称默认去除以 Post/Add/Create/Insert/Submit,GetAll/GetList/Get/Find/Fetch/Query/Search,Put/Update,Delete/Remove/Clear,Patch 开头的字符串。支持自定义配置
- 生成的动作方法名称默认去除以 Async 作为前后缀的字符串。支持自定义配置
- 动作方法名称带 V[0-9_] 结尾的,会自动生成动作方法版本号,如 ChangePasswordV2 -> ChangePassword@2,ChangePasswordV1_1_0 -> ChangePassword@1.1.0。支持版本分隔符配置
- 动作方法名称以 骆驼命名(CamelCase) 会自动切割成多个单词 - 连接。支持自定义配置
- 动作方法参数将自动转为小写。支持自定义配置
请求谓词默认约定
- 动作方法名
以 Post/Add/Create/Insert/Submit 开头,则添加 [HttpPost] 特性。
以 GetAll/GetList/Get/Find/Fetch/Query 开头,则添加 [HttpGet] 特性。
以 Put/Update 开头,则添加 [HttpPut] 特性。
以 Delete/Remove/Clear 开头,则添加 [HttpDelete] 特性。
以 Patch 开头,则添加 [HttpPatch] 特性
支持自定义配置
- 如果不在上面约定中,则默认添加 [HttpPost] 特性。支持自定义配置
路由地址默认约定
- 默认以 api 开头。支持自定义配置
- 默认转换为小写路由地址。支持自定义配置
- 生成控制器路由模板格式为:api/前置参数列表/模块名或默认区域名/[controller@版本号]/后置参数列表
- 生成动作方法路由模板格式为:前置参数列表/模块名/[action@版本号]/后置参数列表
其他约定
- 默认不处理 ControllerBase 控制器类型。支持自定义配置
- 默认不处理 GET,HEAD 请求的引用类型参数。支持自定义配置
原理解析(摘自文档)
控制器特性提供器
Furion 框架会在应用启动时注册 DynamicApiControllerFeatureProvider 控制器特性提供器,该提供器继承自 ControllerFeatureProvider 类。
接着重写 bool IsController(TypeInfo typeInfo) 方法,用来标识控制器类型。在 Furion 框架中,继承自 ControllerBase 类或 IDynamicApiController 接口或 [DynamicApiController] 特性都会被标记为控制器类型。
应用模型转换器
Furion 框架同时在应用启动时注册 DynamicApiControllerApplicationModelConvention 应用模型转换器,该转换器继承自 IApplicationModelConvention 接口。
接着实现 void Apply(ApplicationModel application) 接口方法。在该方法中配置控制器名称、路由、导出可见性及动作方法名称、路由、导出可见性等。
其他
更多操作请查阅文档
文档-动态WebAPI
期待小僧和Furion能带来更多惊喜!
Furion框架亮点之-动态WebAPI
标签:src 模型 contains rem ret 文档 方法 控制 try
原文地址:https://www.cnblogs.com/muphalem/p/14083466.html