还在纠结要不要从传统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步搞定环境
-
安装NuGet包(复制粘贴就行):
bashInstall-Package MiniController Install-Package MiniController.Attributes
(如果用.NET CLI就换这个):
bashdotnet add package MiniController dotnet add package MiniController.Attributes
-
确认项目版本:需要ASP.NET Core 6.0以上(现在新建的项目基本都是啦)。
-
准备好你的WebApi控制器:比如这种熟悉的代码:
csharp// 传统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]
:
csharp
// 原来的
[ApiController]
[Route("api/[controller]")]
// 换成这个
[MiniController("/api/[controller]")] // 路由规则直接传参数
第2步:删掉ControllerBase继承
Minimal API不需要继承啦,直接简化:
csharp
// 原来的
public class UserController : ControllerBase
// 换成这个
public class UserController // 去掉继承
第3步:返回值改一下(可选但推荐)
把IActionResult
换成IResult
,写法更简洁:
csharp
// 原来的
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();
前后,加这两句:
csharp
var builder = WebApplication.CreateBuilder(args);
// 1. 注册MiniController服务(依赖注入用)
builder.Services.AddMiniControllers();
var app = builder.Build();
// 2. 注册所有端点(替代原来的MapControllers())
app.MapMiniController();
app.Run();
搞定!就这么简单?对!因为MiniController会自动帮你生成Minimal API的路由代码,你完全不用手动写那些app.MapGet
、app.MapPost
了!
🧩 高级技巧:保留WebApi的好习惯
担心迁移后丢功能?不存在的!这些WebApi常用功能都支持:
-
依赖注入:构造函数注入照样用
csharppublic class UserController { private readonly IUserService _userService; // 熟悉的构造函数注入 public UserController(IUserService userService) { _userService = userService; } }
-
参数绑定 :
[FromRoute]
、[FromBody]
这些标签继续用csharp[HttpPost] public IResult CreateUser([FromBody] CreateUserRequest request) { // 和以前一样用 }
-
授权和文档 :
[Authorize]
、[ProducesResponseType]
都支持csharp[HttpGet("{id}")] [Authorize(Roles = "Admin")] [ProducesResponseType(typeof(User), 200)] [ProducesResponseType(404)] public IResult GetUser(int id) { // 权限和文档一步到位 }
❓ 常见问题:小白必看
-
迁移后路由变了?
不会!
[MiniController("/api/[controller]")]
和原来WebApi的[Route("api/[controller]")]
效果一样。 -
静态类也能支持?
可以!简单接口直接用静态类,连依赖注入都省了(也支持方法级别的依赖注入):
csharp[MiniController("/api/demo")] public static class DemoController { [HttpGet("hello")] public static IResult Hello() => Results.Ok("Hello World"); }
-
Swagger还能用吗?
完全支持!和以前一样加
AddEndpointsApiExplorer()
和AddSwaggerGen()
就行。
🎉 总结:这波迁移血赚不亏
用MiniController迁移到Minimal API,你会得到:
- 代码量减少50%以上
- 启动速度提升(尤其微服务场景)
- 保留WebApi的开发习惯(不用重新学)
- 自动生成规范的路由代码(少写bug)
还等啥?赶紧拿你的项目试试,10分钟就能体验飞一般的感觉!有问题就在评论区问,小白也能轻松上手~