ASP.NET Core 中的端点路由是如何工作的?

来源:程序开发作者:唐僧头衔:草根站长
导读:本期聚焦于小伙伴创作的《ASP.NET Core 中的端点路由是如何工作的?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《ASP.NET Core 中的端点路由是如何工作的?》有用,将其分享出去将是对创作者最好的鼓励。

端点路由是ASP.NET Core框架中用于管理请求到处理逻辑映射的核心组件,它替代了早期版本的路由系统,将路由匹配和端点执行的逻辑整合到中间件管道中,让整个请求处理流程更加清晰和可扩展。

ASP.NET Core 中的端点路由是如何工作的?

端点路由的核心概念

要理解端点路由的工作方式,首先需要明确几个核心概念:

  • 端点(Endpoint):表示应用中的一个可请求的处理单元,比如一个MVC控制器的Action、一个最小API的处理委托、一个Razor页面的处理方法等,每个端点都包含对应的处理逻辑和元数据信息。
  • 路由模式(Route Pattern):用于匹配请求URL的规则,比如/api/products/{id}这样的模式,可以匹配符合规则的请求路径。
  • 路由中间件:负责接收请求,根据注册的路由规则匹配对应的端点,并将请求交给端点执行的中间件组件。

端点路由的工作流程

端点路由的完整工作流程可以分为三个主要阶段,整个过程嵌入在ASP.NET Core的中间件管道中:

1. 路由注册阶段

在应用启动的时候,我们会通过代码注册各类端点和对应的路由规则,这些规则会被保存到路由系统的数据源中。下面是一个最小API的端点注册示例:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

// 注册端点,路由模式为 /api/hello,处理委托为返回字符串
app.MapGet("/api/hello", () => "Hello from endpoint routing");

// 注册带参数的端点
app.MapGet("/api/products/{id}", (int id) => $"Product id is {id}");

app.Run();

2. 请求匹配阶段

当HTTP请求进入应用的中间件管道后,会经过UseRouting中间件,这个中间件的作用是从请求中提取URL、HTTP方法等信息,然后和之前注册的路由规则进行匹配。如果匹配到对应的端点,会把端点信息存储到当前的HttpContext中;如果没有匹配到,请求会继续往后传递,最终可能返回404响应。

3. 端点执行阶段

匹配到端点之后,请求会到达UseEndpoints中间件,这个中间件会从HttpContext中取出匹配的端点,然后执行端点对应的处理逻辑,将结果返回给客户端。如果前面没有匹配到端点,UseEndpoints中间件不会执行任何处理,请求会继续走后续的中间件。

中间件管道中的位置要求

端点路由相关的两个中间件UseRoutingUseEndpoints在管道中的位置有明确要求,否则会导致路由无法正常工作:

  • UseRouting需要放在可能依赖路由信息的中间件之前,比如身份认证中间件如果需要获取当前请求的端点信息来做权限校验,就需要放在UseRouting之后。
  • UseEndpoints需要放在UseRouting之后,并且通常放在管道的靠后位置,因为它负责执行端点逻辑,后续一般只有异常处理之类的中间件。

下面是一个正确的中间件顺序示例:

var app = WebApplication.CreateBuilder(args).Build();

// 异常处理中间件,放在最前面捕获整个管道的错误
app.UseExceptionHandler("/error");

// 路由匹配中间件,放在需要路由信息的中间件之前
app.UseRouting();

// 身份认证中间件,依赖路由信息做权限判断,放在UseRouting之后
app.UseAuthentication();
app.UseAuthorization();

// 端点执行中间件,放在最后执行匹配到的端点逻辑
app.UseEndpoints(endpoints =>
{
    endpoints.MapGet("/api/hello", () => "Hello");
});

app.Run();

自定义路由规则示例

端点路由支持自定义路由模式,满足不同的业务场景需求,比如添加路由约束、设置路由默认值等:

var app = WebApplication.CreateBuilder(args).Build();

// 带路由约束的端点,id必须是数字
app.MapGet("/api/orders/{id:int}", (int id) => $"Order id is {id}");

// 带默认值的路由,当访问 /api/blog 时,category默认是 tech
app.MapGet("/api/blog/{category=tech}", (string category) => $"Category is {category}");

// 正则约束的路由,name只能包含字母
app.MapGet("/api/user/{name:regex(^[a-zA-Z]+$)}", (string name) => $"User name is {name}");

app.Run();

端点路由的优势

相比之前的路由系统,端点路由的优势主要体现在几个方面:

  • 路由匹配和执行逻辑整合到中间件管道中,流程更清晰,也方便和其他中间件配合。
  • 支持在中间件中获取匹配的端点信息,方便做统一的权限校验、日志记录等操作。
  • 对最小API、MVC、Razor页面等多种处理模式都有良好的支持,统一了路由管理的入口。

ASP.NET_Core端点路由路由中间件请求处理中间件管道修改时间:2026-06-24 07:57:17

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。