ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Furion框架亮点之-动态WebAPI

2020-12-03 23:02:48  阅读:1198  来源: 互联网

标签:WebAPI 控制器 自定义 配置 默认 亮点 支持 Furion


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能带来更多惊喜!

标签:WebAPI,控制器,自定义,配置,默认,亮点,支持,Furion
来源: https://www.cnblogs.com/muphalem/p/14083466.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有