从控制器迁移到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
最新文章
- 小红书AI文章风格转换:违禁词替换与内容优化技巧指南
- REST API 设计:过滤、排序和分页
- 认证与授权API对比:OAuth vs JWT
- 如何获取 Coze开放平台 API 密钥(分步指南)
- 首次构建 API 时的 10 个错误状态代码以及如何修复它们
- 当中医遇上AI:贝业斯如何革新中医诊断
- 如何使用OAuth作用域为您的API添加细粒度权限
- LLM API:2025年的应用场景、工具与最佳实践 – Orq.ai
- API密钥——什么是API Key 密钥?
- 华为 UCM 推理技术加持:2025 工业设备秒级监控高并发 API 零门槛实战
- 使用JSON注入攻击API
- 思维链提示工程实战:如何通过API构建复杂推理的AI提示词系统