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,允许你直接操作端点元数据。

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

Powtoon
Powtoon

AI创建令人惊叹的动画短片及简报

下载
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

Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

9

2026.01.22

html编辑相关教程合集
html编辑相关教程合集

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

56

2026.01.21

三角洲入口地址合集
三角洲入口地址合集

本专题整合了三角洲入口地址合集,阅读专题下面的文章了解更多详细内容。

30

2026.01.21

AO3中文版入口地址大全
AO3中文版入口地址大全

本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

393

2026.01.21

妖精漫画入口地址合集
妖精漫画入口地址合集

本专题整合了妖精漫画入口地址合集,阅读专题下面的文章了解更多详细内容。

116

2026.01.21

热门下载

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

精品课程

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

共137课时 | 9.1万人学习

【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号