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

相关推荐
专注VB编程开发20年2 个月前
在 ASP.NET 中,HTTP 处理程序(HttpHandler)是处理 HTTP 请求的核心组件
iis·asp.net·asp.net core
EdisonZhou4 个月前
使用MCP C# SDK开发MCP Server + Client
llm·aigc·asp.net core·.net core
超软毛毛虫4 个月前
ASP.NET Core 模型验证消息的本地化新姿势
asp.net core·localization
lixww.cn5 个月前
ASP.NET Core用MediatR实现领域事件
ddd·asp.net core·mediatr
lixww.cn5 个月前
ASP.NET Core SignalR向部分客户端发消息
javascript·websocket·vue·asp.net core·signalr
lixww.cn5 个月前
ASP.NET Core SignalR的协议协商
asp.net core·signalr
lixww.cn5 个月前
ASP.NET Core SignalR的分布式部署
redis·消息队列·asp.net core·signalr
lixww.cn5 个月前
ASP.NET Core对JWT的封装
asp.net core·jwt·authorize
lixww.cn5 个月前
ASP.NET Core JWT Version
asp.net core·jwt·filter·identity