首页 > 编程语言 >Asp.Net Core 动态生成WebApi

Asp.Net Core 动态生成WebApi

时间:2023-03-31 11:33:40浏览次数:40  
标签:WebApi Core Asp Service DynamicWebApi userList new options

在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;
            });

 

标签:WebApi,Core,Asp,Service,DynamicWebApi,userList,new,options
From: https://www.cnblogs.com/superfeeling/p/17275762.html

相关文章

  • 界面组件Telerik ASP.NET MVC使用指南 - 如何自定义网格过滤(一)
    TelerikUIforASP.NETMVC拥有使用JavaScript和HTML5构建网站和移动应用所需的70+UI部件,来满足开发者的各种需求,提供无语伦比的开发性能和用户体验。它主要是针对专业级的ASP.NET开发,通过该产品的强大功能,开发者可以开发出功能丰富、适应标准广泛的响应式应用程序。对于任何......
  • use macOS terminal can not install MicroPython on Raspberry Pi Pico bug All In O
    usemacOSterminalcannotinstallMicroPythononRaspberryPiPicobugAllInOne使用macOS终端无法在RaspberryPiPico上安装MicroPythonbugMicroPython环境搭建您可以通过USB将Pico连接到计算机,然后将文件拖放到它上面来对Pico进行编程,因此我们整理了......
  • AspectJ使用
    给下面这个方法增强功能importorg.springframework.stereotype.Component;/***@Classname:AopTest*@Description:*@Author:Stonffe*@Date:2023/3/3020:19*/@ComponentpublicclassAopTest{publicvoidfunc(){System.out.println("functi......
  • ChCore—实验 3:进程与线程、异常处理 部分记录
    思考题1:内核从完成必要的初始化到用户态程序的过程是怎么样的?尝试描述一下调用关系。内核启动到用户程序启动的流程:main├──uart_init├──mm_init├──arch_interrupt_init├──create_root_thread│├──create_root_cap_group│├──__create_......
  • asp.net webapi2.0文件上传
    [Route("api/uploadFile")]publicReturnMessagePostFile(stringsaveDirName){HttpRequesthttpRequest=HttpContext.Current......
  • Metasploit入门到高级【第三章】
    来自公粽号:Kali与编程预计更新第一章:Metasploit简介Metasploit是什么Metasploit的历史和发展Metasploit的组成部分第二章:KaliLinux入门KaliLinux简介KaliLinux安......
  • Metasploit入门到高级【第四章】
    来自公粽号:Kali与编程预计更新第一章:Metasploit简介Metasploit是什么Metasploit的历史和发展Metasploit的组成部分第二章:KaliLinux入门KaliLinux简介KaliLinux安......
  • 【HMS Core】FAQ之机器学习服务知多少
    【问题描述1】使用骨骼点驱动虚拟人偶,华为是否提供相关能力以及可使用的API?【解决方案】API请参考下图:参考链接:https://developer.huawei.com/consumer/cn/doc/development/......
  • ASP.NET Core - 选项系统之源码介绍
    .NETCore选项系统的主要实现在Microsoft.Extensions.Options和Microsoft.Extensions.Options.ConfigurationExtensions两个Nuget包。对于一个框架的源码进行解读,我......
  • 一款针对EF Core轻量级分表分库、读写分离的开源项目
    在项目开发中,如果数据量比较大,比如日志记录,我们往往会采用分表分库的方案;为了提升性能,把数据库查询与更新操作分开,这时候就要采用读写分离的方案。分表分库通常包含垂直分......