0

0

ASP.NET Core 中的端点约定生成器如何用法?

幻夢星雲

幻夢星雲

发布时间:2025-09-24 22:55:01

|

193人浏览过

|

来源于php中文网

原创

EndpointConventionBuilder是ASP.NET Core中用于为路由端点添加元数据或配置策略的构建器对象,它在调用MapControllerRoute、MapRazorPages或Minimal API的MapGet等方法时由框架返回,支持链式调用以附加授权、CORS、缓存等约定。例如,通过RequireAuthorization()可为端点添加授权策略,Add()方法可直接操作元数据添加缓存头,还可扩展自定义约定如WithTraceTag添加日志标记,结合MapGroup可批量应用到多个端点,实现集中式配置管理。

asp.net core 中的端点约定生成器如何用法?

端点约定生成器(EndpointConventionBuilder)在 ASP.NET Core 中用于为路由端点附加元数据或配置策略,比如授权、CORS、缓存等。它不是直接创建的,而是在添加控制器、Razor 页面、Minimal API 等端点时由框架返回的一个构建器对象,你可以链式地为其添加约定。

1. 什么是 EndpointConventionBuilder?

当你使用 MapControllerRouteMapRazorPagesMapGet/Post 等方法注册端点时,它们会返回一个 EndpointConventionBuilder 实例。你可以用这个实例来附加一些“约定”(conventions),这些约定会在路由构建时应用到对应的端点上。

2. 常见用法示例

为 Minimal API 添加授权:

app.MapGet("/api/values", () => "Hello")
   .RequireAuthorization(); // 返回 EndpointConventionBuilder

这里 RequireAuthorization() 是对 EndpointConventionBuilder 的扩展方法,它将授权策略添加到该端点。

为控制器路由添加缓存头:

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}")
.Add(b => b.Metadata.Add(new CacheProfile("DefaultCache")));

Add() 方法接收一个 Action,允许你直接操作端点元数据。

自定义约定:添加日志标记

VWO
VWO

一个A/B测试工具

下载
public static class MyEndpointConventionExtensions
{
    public static TBuilder WithTraceTag(this TBuilder builder, string tag)
        where TBuilder : IEndpointConventionBuilder
    {
        builder.Add(endpointBuilder =>
        {
            if (endpointBuilder is RouteEndpointBuilder routeBuilder)
            {
                routeBuilder.Metadata.Add(new CustomTagMetadata(tag));
            }
        });
        return builder;
    }
}

然后在 Map 时使用:

app.MapGet("/info", () => "Info")
   .WithTraceTag("diagnostics");

3. 在 Controller 中使用 ApiController 特性组合

虽然不是直接调用 EndpointConventionBuilder,但 [ApiController] 实际上就是一种约定,它通过应用多个元数据影响行为。你也可以自定义特性并配合 ApplicationModel 来实现类似效果。

但在 Minimal API 或集中式路由中,EndpointConventionBuilder 提供了更灵活的运行时控制方式。

4. 与 MapGroup 结合使用

MapGroup 返回的是 RouteGroupBuilder,它也实现了 IEndpointConventionBuilder,所以可以批量设置:

var group = app.MapGroup("/api/v1")
               .RequireAuthorization()
               .WithOpenApi();

group.MapGet("/users", () => new[] { "Alice", "Bob" });
group.MapPost("/users", () => Results.Created());

这样所有属于该组的端点都会继承授权和 OpenAPI 描述。

基本上就这些。关键是理解:每次你调用 MapXXX 得到的对象支持链式配置,背后的机制就是 EndpointConventionBuilder 在收集你要附加的元数据或行为。不复杂但容易忽略其灵活性。

相关专题

更多
golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

75

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

36

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

60

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

40

2025.11.27

Java编译相关教程合集
Java编译相关教程合集

本专题整合了Java编译相关教程,阅读专题下面的文章了解更多详细内容。

11

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

4

2026.01.21

无人机驾驶证报考 uom民用无人机综合管理平台官网
无人机驾驶证报考 uom民用无人机综合管理平台官网

无人机驾驶证(CAAC执照)报考需年满16周岁,初中以上学历,身体健康(矫正视力1.0以上,无严重疾病),且无犯罪记录。个人需通过民航局授权的训练机构报名,经理论(法规、原理)、模拟飞行、实操(GPS/姿态模式)及地面站训练后考试合格,通常15-25天拿证。

16

2026.01.21

Python多线程合集
Python多线程合集

本专题整合了Python多线程相关教程,阅读专题下面的文章了解更多详细内容。

1

2026.01.21

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 9万人学习

【web前端】Node.js快速入门
【web前端】Node.js快速入门

共16课时 | 2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号