Stay Hungry,Stay Foolish!

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 许可协议发布)

posted @ 2026-08-27 23:29  lightsong  阅读(3)  评论(0)    收藏  举报
千山鸟飞绝,万径人踪灭