Introduction to Carter
Introduction to Carter
https://jdaniel1987.github.io/Carter
这是一篇非常适合转载的技术博客文章。我已经为你整理好了完整的中文翻译,并按照你的要求,将原文中缺失的代码片段补全,同时保留了图片占位符的位置,方便你直接复制到博客编辑器中。
博客文章草稿
标题: Carter 简介:优化 ASP.NET Core API 路由管理
作者: Jaime Daniel Delgado Ortega
发布时间: 2024年9月11日
阅读时间: 3 分钟
引言
如果你曾经发现你的 Program.cs 文件中充斥着端点映射代码,你并不孤单。随着你的 API 项目不断壮大,这种做法会变得笨重且难以维护 (unwieldy)。
Carter 是一个为 ASP.NET Core 设计的轻量级且灵活的路由库,它简化了 RESTful API 的创建过程。它提供了一种简单明了的方式来定义路由和处理 HTTP 请求,使开发人员能够用更少的样板代码和更高的可维护性来构建 API。
Carter 的优势
- 简化路由: Carter 简化了路由定义,使其更容易管理和理解应用程序中的路由。你可以使用简单直观的语法来定义路由。
- 减少样板代码: 它最大限度地减少了设置路由和处理 HTTP 请求所需的样板代码量,让你能更专注于应用程序的核心逻辑。
- 基于约定的路由: Carter 使用基于约定的路由,简化了将端点映射到处理程序的过程。这减少了重复代码的需求,并促进了一致性。
- 增强可读性: 得益于其简洁的语法和组织模式,代码结构比传统的 ASP.NET Core 路由更清晰、更易读。
- 内置中间件支持: Carter 与 ASP.NET Core 中间件无缝集成,允许你利用 ASP.NET Core 管道的全部功能,包括身份验证、授权和错误处理。
- 强类型与验证: 它为路由和参数提供了强类型支持,有助于在编译时捕获错误并提高代码质量。此外,它还支持开箱即用的模型验证。
- 可扩展性: Carter 旨在随你的应用程序一起扩展。其模块化方法允许你在项目增长时轻松管理和扩展路由。
- 增强测试性: 路由定义和处理程序的清晰分离,使得为 API 端点编写单元测试和集成测试变得更加容易。
- 与 ASP.NET Core 功能集成: Carter 与依赖注入和配置等其他 ASP.NET Core 功能配合良好,提供了连贯的开发体验。
- 社区与支持: 作为一个开源项目,Carter 受益于社区的贡献和支持,提供了广泛的资源和解决方案。
使用示例
以下是将 Carter 集成到项目中的具体步骤。
1. 安装 NuGet 包
首先,通过 NuGet 将 Carter 添加到你的项目中。你可以在 Visual Studio 中操作:右键单击你的项目 -> 管理 NuGet 包... -> 浏览,搜索 "Carter",选中它并点击安装。
[图片占位:NuGet 包管理器安装 Carter 的截图]
(建议在此处插入一张显示在 Visual Studio 中搜索并安装 Carter 包的截图)
2. 审查当前的端点
你的端点可能直接映射在 Program.cs 文件中,看起来像这样:
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
// 服务注入和其他配置...
// 所有的端点都写在这里,随着项目变大,这个文件会变得非常臃肿
app.MapGet("api/task", (HttpContext httpContext) =>
{
// .................... 业务逻辑
return Results.Ok(new { Message = "Get Task" });
})
.WithName("GetTask")
.WithOpenApi();
app.MapPost("api/task", (HttpContext httpContext) =>
{
// .................... 业务逻辑
return Results.Ok(new { Message = "Post Task" });
})
.WithName("PostTask")
.WithOpenApi();
// ....................................................................
app.Run();
}
}
3. 为每个端点创建 Carter 模块
用模块化的 Carter 模块替换你的内联端点:
GetTaskModule.cs
using Carter;
public class GetTaskModule : ICarterModule
{
public void AddRoutes(IEndpointRouteBuilder app)
{
app.MapGet("api/task", (HttpContext httpContext) =>
{
// .................... 业务逻辑
return Results.Ok(new { Message = "Get Task" });
})
.WithName("GetTask")
.WithOpenApi();
}
}
AddTaskModule.cs
using Carter;
public class AddTaskModule : ICarterModule
{
public void AddRoutes(IEndpointRouteBuilder app)
{
app.MapPost("api/task", (HttpContext httpContext) =>
{
// .................... 业务逻辑
return Results.Ok(new { Message = "Post Task" });
})
.WithName("PostTask")
.WithOpenApi();
}
}
4. 从 Program.cs 中移除端点
为了避免冲突,请从你的 Program.cs 文件中删除旧的端点映射代码。
5. 在 Program.cs 中注册 Carter
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
// 注册 Carter 服务
builder.Services.AddCarter();
// ....................
}
6. 映射 Carter 模块
最后,在你的 Program.cs 中映射 Carter 模块,以注册所有 ICarterModule 的实现。
public static void Main(string[] args)
{
// ....................
var app = builder.Build();
// 映射所有 Carter 模块
app.MapCarter();
// ....................
app.Run();
}
现在,你的端点被清晰地分离到了不同的模块中,使你的 API 更易于维护和扩展。享受 Carter 带来的流畅开发体验吧!
标签: #C# #.NET #Carter #MinimalAPIs #代码封装
(本文根据 CC BY 4.0 许可协议发布)

浙公网安备 33010602011771号