还在纠结要不要从传统WebApi迁移到Minimal API?担心改代码改到秃头?别怕!今天给你安利一个黑科技——MiniController,让你既能享受Minimal API的轻量快速,又不用放弃WebApi的优雅写法,迁移过程比泡杯咖啡还简单!

先上链接 https://github.com/fanslead/MiniController

为啥要折腾迁移?

先给小白们科普下:传统WebApi和Minimal API就像老式电脑和轻薄本——前者功能全但笨重,后者小巧快但操作方式不一样。

场景 传统WebApi Minimal API
代码量 一堆模板代码 一行顶过去十行
启动速度 较慢 飞快(尤其适合微服务)
项目结构 层层文件夹(Controllers、Models...) 一个Program.cs搞定大半

但直接转Minimal API又怕不习惯?MiniController就是你的过渡神器

迁移前的准备:3步搞定环境

  1. 安装NuGet包(复制粘贴就行):

    Install-Package MiniController
    Install-Package MiniController.Attributes

    (如果用.NET CLI就换这个):

    dotnet add package MiniController
    dotnet add package MiniController.Attributes
  2. 确认项目版本:需要ASP.NET Core 6.0以上(现在新建的项目基本都是啦)。

  3. 准备好你的WebApi控制器:比如这种熟悉的代码:

    // 传统WebApi控制器
    [ApiController]
    [Route("api/[controller]")]
    public class UserController : ControllerBase
    {
    private readonly IUserService _userService; public UserController(IUserService userService)
    {
    _userService = userService;
    } [HttpGet("{id}")]
    public async Task<IActionResult> GetUser(int id)
    {
    var user = await _userService.GetById(id);
    return Ok(user);
    }
    }

️ 开始迁移:改3处代码就行!

第1步:换个特性标签

[ApiController][Route]删掉,换成[MiniController]

// 原来的
[ApiController]
[Route("api/[controller]")] // 换成这个
[MiniController("/api/[controller]")] // 路由规则直接传参数

第2步:删掉ControllerBase继承

Minimal API不需要继承啦,直接简化:

// 原来的
public class UserController : ControllerBase // 换成这个
public class UserController // 去掉继承

第3步:返回值改一下(可选但推荐)

IActionResult换成IResult,写法更简洁:

// 原来的
public async Task<IActionResult> GetUser(int id)
{
var user = await _userService.GetById(id);
return Ok(user);
} // 换成这个(更清爽)
public async Task<IResult> GetUser(int id)
{
var user = await _userService.GetById(id);
return Results.Ok(user); // 用Results静态类
}

注册服务:加2行代码搞定全局配置

打开Program.cs,找到var app = builder.Build();前后,加这两句:

var builder = WebApplication.CreateBuilder(args);

// 1. 注册MiniController服务(依赖注入用)
builder.Services.AddMiniControllers(); var app = builder.Build(); // 2. 注册所有端点(替代原来的MapControllers())
app.MapMiniController(); app.Run();

搞定!就这么简单?对!因为MiniController会自动帮你生成Minimal API的路由代码,你完全不用手动写那些app.MapGetapp.MapPost了!

高级技巧:保留WebApi的好习惯

担心迁移后丢功能?不存在的!这些WebApi常用功能都支持:

  1. 依赖注入:构造函数注入照样用

    public class UserController
    {
    private readonly IUserService _userService; // 熟悉的构造函数注入
    public UserController(IUserService userService)
    {
    _userService = userService;
    }
    }
  2. 参数绑定[FromRoute][FromBody]这些标签继续用

    [HttpPost]
    public IResult CreateUser([FromBody] CreateUserRequest request)
    {
    // 和以前一样用
    }
  3. 授权和文档[Authorize][ProducesResponseType]都支持

    [HttpGet("{id}")]
    [Authorize(Roles = "Admin")]
    [ProducesResponseType(typeof(User), 200)]
    [ProducesResponseType(404)]
    public IResult GetUser(int id)
    {
    // 权限和文档一步到位
    }

常见问题:小白必看

  1. 迁移后路由变了?

    不会![MiniController("/api/[controller]")]和原来WebApi的[Route("api/[controller]")]效果一样。

  2. 静态类也能支持?

    可以!简单接口直接用静态类,连依赖注入都省了(也支持方法级别的依赖注入):

    [MiniController("/api/demo")]
    public static class DemoController
    {
    [HttpGet("hello")]
    public static IResult Hello() => Results.Ok("Hello World");
    }
  3. Swagger还能用吗?

    完全支持!和以前一样加AddEndpointsApiExplorer()AddSwaggerGen()就行。

总结:这波迁移血赚不亏

用MiniController迁移到Minimal API,你会得到:

  • 代码量减少50%以上
  • 启动速度提升(尤其微服务场景)
  • 保留WebApi的开发习惯(不用重新学)
  • 自动生成规范的路由代码(少写bug)

还等啥?赶紧拿你的项目试试,10分钟就能体验飞一般的感觉!有问题就在评论区问,小白也能轻松上手~

从WebApi迁移到Minimal API?有了这个神器,小白也能10分钟搞定!的更多相关文章

  1. 【.NET6】gRPC服务端和客户端开发案例,以及minimal API服务、gRPC服务和传统webapi服务的访问效率大对决

    前言:随着.Net6的发布,Minimal API成了当下受人追捧的角儿.而这之前,程序之间通信效率的王者也许可以算得上是gRPC了.那么以下咱们先通过开发一个gRPC服务的教程,然后顺势而为,再接着 ...

  2. 一步一步带你做WebApi迁移ASP.NET Core2.0

    随着ASP.NET Core 2.0发布之后,原先运行在Windows IIS中的ASP.NET WebApi站点,就可以跨平台运行在Linux中.我们有必要先说一下ASP.NET Core. ASP ...

  3. WebApi迁移ASP.NET Core2.0

    WebApi迁移ASP.NET Core2.0 一步一步带你做WebApi迁移ASP.NET Core2.0   随着ASP.NET Core 2.0发布之后,原先运行在Windows IIS中的AS ...

  4. .Net Core技术研究-WebApi迁移ASP.NET Core2.0

    随着ASP.NET Core 2.0发布之后,原先运行在Windows IIS中的ASP.NET WebApi站点,就可以跨平台运行在Linux中.我们有必要先说一下ASP.NET Core. ASP ...

  5. 【.NET 6】使用.NET 6开发minimal api以及依赖注入的实现、VS2022热重载和自动反编译功能的演示

    前言: .net 6 LTS版本发布已经有若干天了.此处做一个关于使用.net 6 开发精简版webapi(minimal api)的入门教程,以及VS2022 上面的两个强大的新技能(热重载.代码自 ...

  6. 简单聊下.NET6 Minimal API的使用方式

    前言 随着.Net6的发布,微软也改进了对之前ASP.NET Core构建方式,使用了新的Minimal API模式.之前默认的方式是需要在Startup中注册IOC和中间件相关,但是在Minimal ...

  7. ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了

    引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必是件很痛苦的事情吧,但文档又必须写,而且文档的格式如果没有具体要求的话,最终完成的文档则完全取决于开发者 ...

  8. 第十二节:WebApi自动生成在线Api文档的两种方式

    一. WebApi自带生成api文档 1. 说明 通过观察,发现WebApi项目中Area文件夹下有一个HelpPage文件夹,如下图,该文件夹就是WebApi自带的生成Api的方式,如果该文件夹没了 ...

  9. ASP.NET Core WebApi使用Swagger生成api

    引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必是件很痛苦的事情吧,但文档又必须写,而且文档的格式如果没有具体要求的话,最终完成的文档则完全取决于开发者 ...

  10. ASP.NET Core WebApi使用Swagger生成api说明文档

    1. Swagger是什么? Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件 ...

随机推荐

  1. 4G模块——大夏龙雀DX-CT511-A使用记录

    4G模块--大夏龙雀DX-CT511-A使用记录 加回车换行 115200波特率 重启: AT+RESET 6.关闭HTTP服务: AT$HTTPCLOSE 关闭网路 AT+NETCLOSE 1.TC ...

  2. 【代码】Python3|用Python PIL压缩图片至指定大小,并且不自动旋转

    代码主体是GPT帮我写的,我觉得这个功能非常实用. 解决自动旋转问题参考:一行代码解决PIL/OpenCV读取图片出现自动旋转的问题,增加一行代码image = ImageOps.exif_trans ...

  3. 【工具】秘塔AI搜索|推荐一个现在还免费的AI聚合搜索工具

    网址:https://metaso.cn/ 使用时间:2024/03/27 . 2024/04/10 以前其实用过它家的秘塔写作猫,当时感觉非常不错. 这次看到它出AI搜索,感觉开发者挺有野心和实力的 ...

  4. Grid 布局-容器项

    grid 网格布局是一个用于web的二维布局系统, 多行多列. flex 单行布局则更倾向于一维布局, 一行或者一列. Grid 重点 只是用表格进行排版哈, 横向内容直接无关联哦. 容器项 子项 布 ...

  5. JAVA 用时间生成主键ID

    /** * 生成主键(19位数字) * 主键生成方式,年月日时分秒毫秒的时间戳 例如:1810311557430000845 */ public static synchronized Long ge ...

  6. RPC实战与核心原理之如何在没有接口的情况下进行RPC调用

    如何在没有接口的情况下进行RPC调用 回顾 RPC 如何通过动态分组来实现秒级扩缩容,其关键点就是"动态"与"隔离" RPC调用 RPC 调用,本质上就是调用端 ...

  7. JAVA的那些数据结构实现总结,实现,扩容说明

    能沉淀下来的东西,往往都很基础,整理了下JAVA中遇到的数据结构 目录大纲: 到目前接触到的 有几个说明: 可扩容数组 ArrayList 扩容数组的实现, 满了后扩容,扩容在1.5倍,通过copy过 ...

  8. 测试使用自己编译的WPF框架(本地nuget 包引用)

    上一篇博客 本地编译WPF框架源码 - wuty007 - 博客园 说到自己在本地编译WPF 框架源码,并在本地 源码 的 \wpf\artifacts\packages\Debug\NonShipp ...

  9. odoo16里面的常用方法

    一.全局搜索与显示 def name_get(self): res = [] for order in self: name = order.name if order.draw_number: na ...

  10. Linux日志 查找关键字及其前后的信息

      文章<五分钟扫盲:25个工作中常用的Linux命令>介绍了常用的Linux命令,属于理论知识,这里知行合一,介绍如何从Linux日志中通过关键字过滤出我们需要的信息.   这里以查看名 ...