首页 > 其他分享 >NET.AutoApi 动态webapi接口,一个配置让你无需创建控制器类

NET.AutoApi 动态webapi接口,一个配置让你无需创建控制器类

时间:2023-01-14 21:57:12浏览次数:62  
标签:webapi 控制器 Task AutoApi input NET public

前言

如果你的控制器代码像下面一样,只是对业务层做一层转发,那么能否将这个控制器“动态创建”,让开发只需要关注业务代码就行呢?答案是可以的。

public class UserController:ControllerBase
{
    private readonly IUserAppService _userAppService;
    public UserController(IUserAppService userAppService) => _userAppService = userAppService;
    [HttpGet]
    public async Task<PageResult<List<xxxDto>>> GetListAsync(xxxDto input)
    {
        //控制器层什么都没有干,只是为了转发下业务层
        return await _userAppService.GetListAsync(input);
    }
    //省略……
}

先看下最终的效果图

简介

NET.AutoApi 是一个用于“动态创建”webapi接口的包,之所以动态创建打上引号,是因为其底层是根据 AspNetCore 抛出的扩展,能够将任何类转换成控制器,并在程序初始化的时候给每个类的方法动态加上控制器方法的特性。下一篇文章,我会讲下内部是怎么实现的。那么我们闲话少说,我们以一个简单地三层架构项目来直入主题。

项目示例

我这边以一个用户的增删改查来示例

项目结构

第一步:在 Demo.Service.Abstracts 引入 NET.AutoApi

dotnet add package NET.AutoApi

第二步:让IUserService 继承 IAutoApiService接口

public interface IUserService : IAutoApiService
{
    public Task<(List<UserGetListOutput>, long)> GetListAsync(UserGetListInput input);
    public Task<UserGetListOutput> CreateAsync(UserCreateUpdateInput input);
    public Task<UserGetListOutput> UpdateAsync(int id, UserCreateUpdateInput input);
    public Task<bool> DeleteAsync(int id);
    public Task<bool> ImportAsync(IAutoApiStreamContent input);
}

第三步:实现IUserService接口

第四步:在WebApi的Program.cs 添加 AddAutoApiService方法

最终效果

总结

  • NET.AutoApi 可以让我们的代码变得更加简洁,让开发只专注于业务代码实现,只需要两步配置,
    1. 让我们的业务层代码实现:IAutoApiService 接口
    2. 在Program类中添加AddAutoApiServiceUseAutoApiService 方法

本文章的代码:https://gitee.com/fengwuyan/auto-api-demo

在使用NET.AutoApi的框架

  1. Yi.Framework

标签:webapi,控制器,Task,AutoApi,input,NET,public
From: https://www.cnblogs.com/norain/p/17049662.html

相关文章

  • Kubernetes:通过轻量化工具 kubespy 实时观察YAML资源变更
    写在前面分享一个小工具​​kubespy​​给小伙伴博文内容涉及:工具的简单介绍下载安装以​​kubectl​​插件方式使用Demo理解不足小伙伴帮忙指正我所渴求的,無非是......
  • OS + Docker network calico / weave / flannel
    scalico,weave,flannel等开源网络组件 DockerWeaveNetworkhttps://www.cnblogs.com/xiangsikai/p/9900250.htmlWeaveNetwork:属于第三方网络项目。Weave在Docker主......
  • 【ASP.NET Core】按用户角色授权
    上次老周和大伙伴们分享了有关按用户Level授权的技巧,本文咱们聊聊以用户角色来授权的事。按用户角色授权其实更好弄,毕竟这个功能是内部集成的,多数场景下我们不需要扩展,不......
  • docker .net core3.1 Dockerfile
    安装步骤和core2.x一样看之前的随笔:Docker配置dotnetcore项目直接看DockerfileFROMmcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim#基础环境镜像WORKDIR......
  • 用Netty实现单机百万TCP长连接
    一、模拟单机连接瓶颈我们知道,通常启动一个服务端会绑定一个端口,例如8000端口,当然客户端连接端口是有限制的,除去最大端口65535和默认的1024端口及以下的端口,就只剩下1024~6......
  • Netty-核心模块组件-4
    Netty核心模块组件一、Bootstrap、ServerBootstrap1、Bootstrap意思是引导,一个Netty应用通常由一个Bootstrap开始,主要作用是配置整个Netty程序,串联各个组件Netty......
  • 【论文导读】- SpreadGNN: Serverless Multi-task Federated Learning for Graph Neur
    文章目录​​论文信息​​​​摘要​​​​SpreadGNNFramework​​​​用于图层次学习的联邦图神经网络​​​​图神经网络的联邦多任务学习​​​​SpreadGNN​​​​DPA-......
  • linux中非root用户安装R:configure: WARNING: neither inconsolata.sty nor zi4.sty fo
     001、问题:configure:WARNING:neitherinconsolata.stynorzi4.styfound:PDFvignettesandpackagemanualswillnotberenderedoptimally  002、解决方......
  • hrnet
    train.py的221行是做train_loader。train_loader=make_dataloader(cfg,is_train=True,distributed=args.distributed)他这里有几句下面是被make_dataloa......
  • .Net6在Docker环境下操作Selenium.Chrome的那些坑
    .Net6中想实现对某个网址截屏,可通过Selenium模拟访问网址并实现截图。实现安装Nuget包<PackageReferenceInclude="Selenium.Chrome.WebDriver"Version="85.0.0"/><......