惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - Franky
T
Tailwind CSS Blog
Microsoft Azure Blog
Microsoft Azure Blog
The Cloudflare Blog
博客园 - 叶小钗
N
Netflix TechBlog - Medium
罗磊的独立博客
量子位
MyScale Blog
MyScale Blog
A
About on SuperTechFans
Blog — PlanetScale
Blog — PlanetScale
V
Visual Studio Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
GbyAI
GbyAI
B
Blog
腾讯CDC
爱范儿
爱范儿
Recent Announcements
Recent Announcements
有赞技术团队
有赞技术团队
F
Fortinet All Blogs
雷峰网
雷峰网
G
Google Developers Blog
Google DeepMind News
Google DeepMind News

博客园 - lightsong

LoRA unsloth比transformer库本身的微调有什么优点? offline-llms +++ transformer + peft 微调 Train and Fine-Tune Sentence Transformers Models Symmetric vs. Asymmetric Semantic Search Hierarchical Navigable Small Worlds (HNSW) Vision Transformer + BentoML ML Serving/编排工具 Introducing Gemma 3 270M: The compact model for hyper-efficient AI Utopia -- 企业世界模型 trustgraph semantica semantica vs graphti Industrial-Strength Natural Language Processing seata reference with springboot and other valuable demo outbox pattern with springboot Saga pattern with springboot 基于 Sentence Transformers 的具体应用案例 Vault with Keycloak as workload IAM Ontology Reasoning System ADR Claude Code的hook The AI-Native SDLC playbook Introduction to Dapper Introduction to FluentValidation Introduction to AutoFixture Introduction to FluentAssertions Understanding Return Types: IEnumerable, IReadOnlyCollection, and List Introduction to Refit Introduction to Minimal APIs
Introduction to Carter
lightsong · 2026-08-27 · via 博客园 - lightsong

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

出处:http://www.cnblogs.com/lightsong/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。