端点路由在ASP.NET Core中通过分离路由匹配与执行,实现请求的高效分发与安全控制。应用启动时构建路由表,运行时根据路径和方法匹配端点,并封装为包含元数据的Endpoint对象。UseRouting()中间件负责解析目标,UseEndpoints()注册具体路由,如控制器或MapGet定义的轻量接口。匹配后,授权、CORS等中间件可读取端点元数据进行访问控制,再调用实际处理程序。直接路由(如MapGet)与传统MVC路由统一管理,均支持元数据驱动的行为约束,提升安全性与扩展性。

ASP.NET Core 中的端点路由(Endpoint Routing)是一种将请求匹配到具体处理逻辑(如控制器、Razor 页面、SignalR 集线器等)的机制。它在中间件管道中独立存在,允许你在请求处理流程的不同阶段进行检查和干预,比如用于授权、CORS 等。
端点路由的基本工作流程
当一个 HTTP 请求进入应用时,端点路由系统会执行以下步骤:
- 构建路由表:在应用启动时,框架根据你定义的路由规则(如 MapControllerRoute、MapGet 等)生成一个路由配置集合。
- 匹配请求:运行时通过路径、HTTP 方法等信息,在路由表中查找最匹配的端点。
-
创建端点对象:每个可路由的处理程序(例如某个 Action 方法)会被封装成一个
Endpoint对象,包含元数据(如策略、名称、参数等)。 - 执行中间件判断:像授权(Authorization)或跨域(CORS)这类中间件可以在路由匹配后、实际执行前检查端点上的元数据,并决定是否放行请求。
- 调用目标处理程序:一旦通过所有前置检查,请求被交给最终的处理逻辑,比如 MVC 的控制器方法。
路由映射与终结点注册
在 Program.cs 或启动类中,你需要显式设置路由规则。常见的注册方式包括:
app.UseRouting(); // 启用路由解析
app.UseAuthorization(); // 可以基于端点做授权判断
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapGet("/hello", () => "Hello World");
});
其中 UseRouting() 添加了路由匹配中间件,而 UseEndpoints() 实际挂载了各个端点。从 ASP.NET Core 3.0 起,这种“分离式”设计让授权等中间件可以访问到即将执行的端点信息。
端点元数据的作用
每个端点都可以携带一组元数据(Metadata),这些数据是任意类型的对象,常用于描述该端点需要的行为约束。例如:
系统介绍:YIXUNCMS中专专版是易迅软件工作室在中秋节来临之即推出的专题模板建站系统,使用增强版后台管控系统,板板设计符合节日特点。易迅软件工作室恭祝全国人民中秋快乐。特别提示:由于网站页面的不同设计,部分后台功能未在前端进行体现。系统特点:1、采用目前流行的PHP语言编写,底层采用超轻量级框架作为系统支撑;2、页面布局使用DIV+CSS技术,遵循WEB标准,及大提高页面的浏览速度;3、使用应
- 某个 API 需要用户登录才能访问,可以添加
[Authorize]属性,这会在端点上生成对应的授权元数据。 - CORS 策略也可以作为元数据附加到特定端点。
- 中间件在执行时能读取这些元数据,从而做出决策。
这意味着你可以编写自定义中间件来查看当前匹配的端点是否有某种标记,并据此改变处理流程。
直接路由与传统路由的区别
使用 MapGet、MapPost 等方法注册的是“直接路由”,它们不依赖控制器结构,适合轻量级 API 或脚本式处理。而控制器中的 [Route] 和 [HttpGet] 则由 MVC 框架转换为端点。
两者都统一纳入端点路由系统管理,因此无论哪种方式,都能享受一致的中间件支持和元数据功能。
基本上就这些。端点路由的核心价值在于把“找到处理者”和“是否允许访问”这两个问题解耦,提高了灵活性和可扩展性。理解这一点有助于更好地设计安全策略和中间件行为。










