从控制器迁移到Minimal API | 作者:Christian Brevik - Variant
从控制器迁移到 Minimal API 的探索
如果你已经习惯了使用 MVC 控制器,并且想了解如何在 ASP.NET Core 中以一种简洁且高效的方式使用 Minimal API,那么这篇文章将为你提供一些有用的指导。
Minimal API 的基本示例
当你第一次接触 Minimal API 时,可能会看到类似以下的代码示例:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();与传统的 MVC 控制器相比,这种方式显得非常简单直接。然而,如果你将所有路由(如 app.MapGet 和 app.MapPost)都放在 Program.cs 文件中,并直接在其中编写逻辑,随着项目的复杂度增加,代码将变得难以维护。
Minimal API 与控制器的对比
在使用控制器时,你通常会为每个路由前缀创建一个控制器类,并在其中定义多个操作方法。这种方式提供了明确的关注点分离,并且代码组织也更加清晰。
Minimal API 则没有控制器类作为端点的容器。以下是一个 Minimal API 的示例:
// Program.cs
app.MapGet("/hello", (IHelloService helloService) => helloService.FetchHello());虽然这种方式简洁,但如果你希望将逻辑从路由中分离出来,可以通过扩展方法来实现。
使用扩展方法优化路由
为了保持 Program.cs 文件的整洁,可以将路由逻辑封装到扩展方法中:
public static class HelloEndpoints
{
    public static void MapHelloEndpoints(this WebApplication app)
    {
        app.MapGet("/hello", (IHelloService helloService) => helloService.FetchHello());
    }
}然后在 Program.cs 中调用:
app.MapHelloEndpoints();虽然这种方式将路由逻辑移到了单独的文件中,但当端点数量增加时,代码仍然可能变得难以管理。
更进一步的优化:分离处理逻辑
为了进一步优化代码,可以将每个端点的处理逻辑封装到独立的类中。例如:
public class GetHello
{
    public static GetHelloResponse Handle(IHelloService helloService)
    {
        return helloService.FetchHello();
    }
}然后在扩展方法中引用这些处理类:
public static class HelloEndpoints
{
    public static void MapHelloEndpoints(this WebApplication app)
    {
        app.MapGet("/hello", GetHello.Handle);
    }
}这种方式不仅清晰地分离了路由和逻辑,还使得每个类专注于实现特定的业务功能。
使用路由组实现更高级的功能
Minimal API 提供了路由组(Route Group)的功能,可以为一组路由添加通用的配置。例如:
var group = app.MapGroup("/hello")
    .RequireAuthorization()
    .WithOpenApi();
group.MapGet("/", GetHello.Handle);通过这种方式,可以为同一组路由统一添加授权、OpenAPI 文档等配置。
如果需要为多个组应用相同的行为,可以创建扩展方法:
public static class RouteGroupBuilderExtensions
{
    public static RouteGroupBuilder MapAdminGroup(
        this IEndpointRouteBuilder builder,
        string prefix,
        string groupName)
    {
        return builder.MapGroup($"admin/{prefix}")
            .WithOpenApi()
            .WithTags(groupName)
            .RequireAuthorization("admin");
    }
}在 Program.cs 中使用:
app.MapAdminGroup("hello", "Hello")
   .MapHelloEndpoints();文件组织建议
为了更好地管理代码,可以按照以下结构组织文件:
- 每个路由组对应一个文件夹,例如 HelloEndpoints。
- 每个端点的处理逻辑放在独立的类中,例如 GetHello和PostHello。
- 嵌套路由可以放在子文件夹中,例如 HelloGoodbyeEndpoints。
这种结构不仅清晰,还便于快速导航和维护。
总结
通过本文描述的模式,你可以在 Minimal API 中实现类似 MVC 控制器的关注点分离,同时保持代码的简洁和灵活性。无论是小型原型还是大型生产级 API,这种模式都能很好地适应。
希望这篇文章对你有所帮助,祝你在构建 Minimal API 时一切顺利!😊
原文链接
从控制器迁移到 Minimal API | 作者:Christian Brevik – Variant
原文链接: https://blog.variant.no/moving-from-controllers-to-minimal-api-bda56a223cc8热门API
- 1. AI文本生成
- 2. AI图片生成_文生图
- 3. AI图片生成_图生图
- 4. AI图像编辑
- 5. AI视频生成_文生视频
- 6. AI视频生成_图生视频
- 7. AI语音合成_文生语音
- 8. AI文本生成(中国)
最新文章
- 9个最佳Text2Sql开源项目:自然语言到SQL的高效转换工具
- 深入解析API网关策略:认证、授权、安全、流量处理与可观测性
- GraphQL API手册:如何构建、测试、使用和记录
- 自助式入职培训服务API:如何让企业管理更上一层楼?
- Python如何调用Jenkins API自动化发布
- 模型压缩四剑客:量化、剪枝、蒸馏、二值化
- 火山引擎如何接入API:从入门到实践的技术指南
- 为什么每个使用 API 的大型企业都需要一个 API 市场来增强其合作伙伴生态系统
- 构建更优质的API:2025年顶级API开发工具推荐 – Strapi
- 外部函数与内存API – Java 22 – 未记录
- FAPI 2.0 深度解析:下一代金融级 API 安全标准与实践指南
- .NET Core 下的 API 网关