从WebApi迁移到Minimal API?有了这个神器,小白也能10分钟搞定!

还在纠结要不要从传统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包(复制粘贴就行):

    bash 复制代码
    Install-Package MiniController
    Install-Package MiniController.Attributes

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

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

  3. 准备好你的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.MapGetapp.MapPost了!

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

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

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

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

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

    csharp 复制代码
    [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. 静态类也能支持?

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

    csharp 复制代码
    [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分钟就能体验飞一般的感觉!有问题就在评论区问,小白也能轻松上手~

相关推荐
绿荫阿广5 天前
使用.NET开发并上线一个小智AI对话机器人的MCP服务转接平台
.net·asp.net core·mcp
dephixf14 天前
工业级部署指南:在西门子IOT2050(Debian 12)上搭建.NET 9.0环境与应用部署(进阶篇)
asp.net core·iot·设备管理系统·.net 9·能源管理监控系统
绿荫阿广1 个月前
.NET开发上手Microsoft Agent Framework(一)从开发一个AI美女聊天群组开始
.net·asp.net core·agent framework
wangbin55421 个月前
使用Scalar.AspNetCore来管理你的OpenApi
asp.net core
ArabySide2 个月前
【ASP.NET Core】分布式场景下ASP.NET Core中JWT应用教程
分布式·后端·asp.net core
绿荫阿广2 个月前
用纯.NET开发并制作一个智能桌面机器人(六):使用.NET开发一个跨平台功能完善的小智AI客户端
c#·.net·asp.net core·maui·winui
冷冷的菜哥3 个月前
ASP.NET Core文件分片上传
c#·asp.net·asp.net core·文件分片上传
冷冷的菜哥3 个月前
ASP.NET Core上传文件到minio
后端·asp.net·上传·asp.net core·minio
ArabySide3 个月前
【ASP.NET Core】双Token机制在ASP.NET Core中的实现
后端·asp.net core
ArabySide4 个月前
【ASP.NET Core】探讨注入EF Core的DbContext在HTTP请求中的生命周期
后端·http·asp.net·asp.net core·efcore