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

相关推荐
ChaITSimpleLove41 分钟前
深入解析 ASP.NET Core Options 模式:IOptions、IOptionsSnapshot 与 IOptionsMonitor 实战指南
asp.net core·snapshot·依赖注入di·options模式·ioptions·ioptionsmonitor·配置热更新
医疗信息化王工20 小时前
医院自律端系统——预警处置模块全栈实战(ASP.NET Core + Vue3 + Quartz 定时调度)
mysql·postgresql·vue·asp.net core·quartz
Esofar23 天前
Dddify:给 ASP.NET Core 项目一套轻量、清晰、可落地的 DDD 基础设施
c#·ddd·asp.net core·cqrs·dddify·clean architecture
CSharp精选营1 个月前
.NET 8 Web开发入门(三):解构引擎——依赖注入(DI)与中间件管道
中间件·asp.net core·依赖注入·ioc容器·请求管道·服务生命周期
医疗信息化王工2 个月前
基于ASP.NET Core的医院输血审核系统设计与实现
后端·mvc·asp.net core·输血审核
医疗信息化王工2 个月前
基于ASP.NET Core的住院日志统计系统设计与实现
后端·layui·asp.net core·npoi·dapper
无风听海2 个月前
.NET10之HttpContext.RequestServices 深入解析
.net·asp.net core
硅基喵2 个月前
聊聊 ASP.NET Core 中间件和过滤器的区别
asp.net core
小邓的技术笔记3 个月前
Serilog:从结构化日志认知到 .NET 工程落地
asp.net core·结构化日志·可观测性·serilog
硅基喵3 个月前
Serilog:从结构化日志认知到 .NET 工程落地
asp.net core·可观测性