惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
量子位
MongoDB | Blog
MongoDB | Blog
N
Netflix TechBlog - Medium
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
B
Blog
A
About on SuperTechFans
腾讯CDC
The GitHub Blog
The GitHub Blog
云风的 BLOG
云风的 BLOG
雷峰网
雷峰网
Last Week in AI
Last Week in AI
H
Help Net Security
WordPress大学
WordPress大学
博客园 - 司徒正美
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
Tailwind CSS Blog
博客园 - 【当耐特】
S
SegmentFault 最新的问题
美团技术团队
M
MIT News - Artificial intelligence
L
LangChain Blog
博客园 - 聂微东

博客园 - 广阔之海

Halcon的三角函数 Halcon轮廓插值方法 C# 控件选项变化事件处理 深度学习执行速度不稳定的解决方法 Halcon - 深度学习 - 目标分类 Halcon 画一个时钟 Halcon 解方程(solve_matrix) C# 使用Serilog日志框架 Halcon 生成标定板 Halcon 中的形态学 Halcon的提取中心线算法 C# 消灭switch的面向映射编程 C#中Task的用法 Halcon 通过坐标轴过滤点云数据 Halcon图像投影映射 C# 获取MySql的数据库结构信息 C# HttpClient的使用方法总结 MySql字符集导致特殊字符保存出错问题处理 Asp.Net Core WebApi中集成Jwt认证
Asp.Net Core 动态生成WebApi
广阔之海 · 2022-05-30 · via 博客园 - 广阔之海

在WebApi架构体系中,一般需要先编写应用服务实现,再通过编写Controller来实现应用服务的Web接口。Controller中的代码作用仅仅是调用Service的方法,将Service提升为Web接口,其实完全可以通过动态生成WebApi来减少编码工作。在.Net示例项目ABP中已经实现了动态生成WebApi的功能,Panda.DynamicWebApi项目将这部分代码进行了抽取和封装,我们可以通过引用Panda.DynamicWebApi项目来实现动态生成WebApi。

第一步,通过Nuget添加Panda.DynamicWebApi的项目引用

在VS2019的Nuget包管理器中,搜索并添加Panda.DynamicWebApi的项目引用。

第二步,给Service添加[DynamicWebApi]特性,并继承IDynamicWebApi接口

   [DynamicWebApi]
    [ApiExplorerSettings(GroupName = "v1")]
    public class UserAppService : IDynamicWebApi
    {
        public List<UserInfo> GetUserList()
        {
            var userList = new List<UserInfo>();
            userList.Add(new UserInfo()
            {
                UserId = 1,
                UserName = "张三",
                PhoneNum = "13344455566",
                Address = "北京"
            });
            userList.Add(new UserInfo()
            {
                UserId = 2,
                UserName = "李四",
                PhoneNum = "13322233344",
                Address = "天津"
            });
            userList.Add(new UserInfo()
            {
                UserId = 3,
                UserName = "王五",
                PhoneNum = "13355566677",
                Address = "上海"
            });
            return userList;
        }
    }

注意:

(1)DynamicWebApi默认的服务命名后缀是AppService,这个可以配置;
(2)使用DynamicWebApi,必须在服务类上添加特性[ApiExplorerSettings(GroupName = "v1")],指定GroupName才能让Swagger展示接口;
(3)DynamicWebApi有一套默认的请求方式命名规则,这个可以自行配置,也可配置为全部是POST方式
第三步,在Startup类中的ConfigureServices方法中,配置启用DynamicWebApi

            // 自定义配置
            services.AddDynamicWebApi((options) =>
            {
                // 指定全局默认的 api 前缀
                options.DefaultApiPrefix = null;

                // 指定全局默认的去除控制器后缀
                options.RemoveControllerPostfixes = new List<string>() { "Service" };

                // 清空API结尾,不删除API结尾;若不清空 CreatUserAsync 将变为 CreateUser
                options.RemoveActionPostfixes.Clear();

                // 自定义 ActionName 处理函数;
                options.GetRestFulActionName = (actionName) => actionName;
            });