码迷,mamicode.com
首页 > Windows程序 > 详细

Furion框架亮点之-动态WebAPI

时间:2020-12-08 12:35:32      阅读:11      评论:0      收藏:0      [点我收藏+]

标签:src   模型   contains   rem   ret   文档   方法   控制   try   

Furion框架亮点之-动态WebAPI

最近研究小僧的.Net5框架Furion,其中不乏让人眼前一亮的新鲜玩意儿。于是想把一些亮点记录并作分享。

相关地址

项目
文档

动态WebAPI简述(摘自文档)

动态WebAPIFurion框架创造出一种更加灵活创建WebAPI控制器的方式,它对ASP.NET Core WebAPI进行了大量拓展和优化。
具有以下优点:

  • 具备原有的ControllerBase所有功能
  • 支持任意公开非静态 非抽象 非泛型类转控制器
  • 提供更加灵活方便的IDynamicApiController空接口或[DynamicApiController]特性替代ControllerBase抽象类
  • 无需手动配置[HttpMethod]特性,同时支持一个动作方法多个HttpVerb
  • 无需手动配置[Route]特性,支持更加灵活的配置及自动路由生成
  • 支持返回泛型接口,泛型类
  • Swagger深度结合,提供极其方便的创建Swagger分组配置
  • 支持Basic Auth Jwt ApiKey等多种权限灵活配置
  • 支持控制器、动作方法版本控制功能
  • 支持GETHEAD请求自动转换 类类型参数
  • 支持生成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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!