端点路由在ASP.NET Core中通过分离路由匹配与执行,实现请求的高效分发与安全控制。应用启动时构建路由表,运行时根据路径和方法匹配端点,并封装为包含元数据的Endpoint对象。UseRouting()中间件负责解析目标,UseEndpoints()注册具体路由,如控制器或MapGet定义的轻量接口。匹配后,授权、CORS等中间件可读取端点元数据进行访问控制,再调用实际处理程序。直接路由(如MapGet)与传统MVC路由统一管理,均支持元数据驱动的行为约束,提升安全性与扩展性。
ASP.NET Core 中的端点路由(Endpoint Routing)是一种将请求匹配到具体处理逻辑(如控制器、Razor 页面、SignalR 集线器等)的机制。它在中间件管道中独立存在,允许你在请求处理流程的不同阶段进行检查和干预,比如用于授权、CORS 等。
当一个 HTTP 请求进入应用时,端点路由系统会执行以下步骤:
Endpoint
对象,包含元数据(如策略、名称、参数等)。在 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),这些数据是任意类型的对象,常用于描述该端点需要的行为约束。例如:
[Authorize]
属性,这会在端点上生成对应的授权元数据。这意味着你可以编写自定义中间件来查看当前匹配的端点是否有某种标记,并据此改变处理流程。
使用 MapGet
、MapPost
等方法注册的是“直接路由”,它们不依赖控制器结构,适合轻量级 API 或脚本式处理。而控制器中的 [Route]
和 [HttpGet]
则由 MVC 框架转换为端点。
两者都统一纳入端点路由系统管理,因此无论哪种方式,都能享受一致的中间件支持和元数据功能。
基本上就这些。端点路由的核心价值在于把“找到处理者”和“是否允许访问”这两个问题解耦,提高了灵活性和可扩展性。理解这一点有助于更好地设计安全策略和中间件行为。
以上就是ASP.NET Core 中的端点路由是如何工作的?的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号