ASP.NET Core端点路由 作用原理

Web API学习笔记(六)——路由(Routing) 1.路由是将传入http请求(URL)映射到特定资源的过程(a action method)。2.我们可以使用唯一的URL访问任何的资源。3.一个资源可以有多个唯一的URL。4.多个资源不能具有相同的URL。 阅读详情

端点路由(Endpoint Routing)最早出现在ASP.NET Core2.2,在ASP.NET Core3.0提升为一等公民。
在这里插入图片描述

Endpoint Routing的动机

在端点路由出现之前,我们一般在请求处理管道的末尾,定义MVC中间件解析路由。这种方式意味着在处理管道中,MVC中间件之前的中间件将无法获得路由信息。

路由信息对于某些中间件非常有用,比如CORS、认证中间件(认证过程可能会用到路由信息)。

同时端点路由提炼出端点概念,解耦路由匹配逻辑、请求分发。

Endpoint Routing中间件

由一对中间件组成:

  1. UseRouting 将路由匹配添加到中间件管道。该中间件查看应用程序中定义的端点集合,并根据请求选择最佳匹配。
  2. UseEndpoints 将端点执行添加到中间件管道。 MapGet、MapPost等方法将 处理逻辑连接到路由系统;其他方法将 ASP.NET Core框架特性连接到路由系统。
  3. MapRazorPages for Razor Pages
  4. MapControllers for controllers
  5. MapHub< THub> for SignalR
  6. MapGrpcService< TService> for gRPC

处于这对中间件上游的 中间件:始终无法感知 Endpoint;
处于这对中间件之间的 中间件,将会感知到被匹配的Endpoint,并有能力附加处理逻辑;
UseEndpoints是一个终点中间件;
没有匹配,则进入UseEndpoints之后的中间件。

放置在UseRouting、UseEndpoints之间的认证授权中间件可以:
感知被匹配的端点信息;在调度到Endpoint之前,应用授权策略。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    // Matches request to an endpoint.
    app.UseRouting();

    // Endpoint aware middleware. 
    // Middleware can use metadata from the matched endpoint.
    app.UseAuthentication();
    app.UseAuthorization();

    // Execute the matched endpoint.
    app.UseEndpoints(endpoints =>
    {
        // Configure the Health Check endpoint and require an authorized user.
        endpoints.MapHealthChecks("/healthz").RequireAuthorization();

        // Configure another endpoint, no authorization requirements.
        endpoints.MapGet("/", async context =>
        {
            await context.Response.WriteAsync("Hello World!");
        });
    });
}

以上在/health定义了健康检查,该端点定义了IAuthorizeData metadata,要求先认证再执行健康检查。


我们在UseRouting、UseEndpoints之间添加一点测试代码: 感知端点:

   app.Use(next => context =>
    {
        var endpoint = context.GetEndpoint();
        if (endpoint is null)
        {
            return Task.CompletedTask;
        }
        Console.WriteLine($"Endpoint: {endpoint.DisplayName}");

        if (endpoint is RouteEndpoint routeEndpoint)
        {
            Console.WriteLine("Endpoint has route pattern: " +
                routeEndpoint.RoutePattern.RawText);
        }

        foreach (var metadata in endpoint.Metadata)
        {
            Console.WriteLine($"Endpoint has metadata: {metadata}");
        }
        return next(context);
    });

当请求/healthz时,感知到AuthorizeAttribute metadata
在这里插入图片描述
故猜想认证授权中间件要对/healthz起作用,必然会对这个 AuthorizeAttribute metadata有所反应。

于是翻阅Github AuthorizationMiddleware 3.0源码:发现请求处理的委托确实关注了Endpoint,并提取了metadata中的IAuthorizeData授权信息。

// ---- 截取自https://github.com/dotnet/aspnetcore/blob/master/src/Security/Authorization/Policy/src/AuthorizationMiddleware.cs-----
if (endpoint != null)
{
    context.Items[AuthorizationMiddlewareInvokedWithEndpointKey] = AuthorizationMiddlewareWithEndpointInvokedValue;
}
var authorizeData = endpoint?.Metadata.GetOrderedMetadata<IAuthorizeData>() ?? Array.Empty<IAuthorizeData>();
var policy = await AuthorizationPolicy.CombineAsync(_policyProvider, authorizeData);
if (policy == null)
{
     await _next(context);
     return;
}
var policyEvaluator = context.RequestServices.GetRequiredService<IPolicyEvaluator>();
......

测试代码感知的AuthorizeAttribute确实是实现了IAuthorizeData接口。

bingo, 猜想得到源码验证。

结论

端点路由:允许ASP.NET Core应用程序在中间件管道的早期确定要调度的端点, 以便后续中间件可以使用该信息来提供当前管道配置无法提供的功能。

这使ASP.NET Core框架更加灵活,强化端点概念,它使路由匹配、解析功能与端点调度功能脱钩。

ASP.NET Core 入门教程 3、ASP.NET Core MVC路由入门 一、前言 1、本文主要内容 ASP.NET Core MVC路由工作原理概述 ASP.NET Core MVC带路径参数的路由示例 ASP.NET Core MVC固定前/后缀的路由示例 ASP.NET Core MVC正则表达式匹配路由示例 ASP.NET Core MVC路由约束与自定义路由约束 ASP.NET Core MVC RouteAttribute绑定式路由使用介绍 2、本教程环... 阅读详情

相关推荐

鸿蒙OS+UniApp文件上传实战:如何解决大文件分片上传的3大坑?

本文深入探讨鸿蒙OS与UniApp结合实现大文件分片上传的实战方案,重点解决分片策略设计、网络中断处理和进度管理三大技术难题。通过鸿蒙分布式特性与UniApp跨平台能力的结合,提供动态分片调整、断点续传和跨设备进度同步等优化方案,显著提升大文件上传成功率和用户体验。

weixin_29250403的博客 473

Asp.Net Core EndPoint 终结点路由工作原理解读

Asp.Net Core EndPoint 终点路由工作原理解读 一、背景 在本打算写一篇关于Identityserver4的文章时候,却发现自己对EndPoint-终结点路由还不是很了解,故暂时先放弃了IdentityServer4的研究和编写;所以才产生了今天这篇关于EndPoint(终结点路由) 的文章。 还是跟往常一样,打开电脑使用强大的Google 和百度搜索引擎查阅相关资料,以及打开Asp.net core 3.1 的源代码进行拜读,同时终于在我的实践及测试中对EndPoint有...

面朝大海,春暖花开 1603

工程创新训练大赛智能网联车辆赛道LKA+自动驾驶9000+分数分案例

/获取主车在主车路径上的ST坐标。if (status == AVPStatus::eForwarding) // approaching the parking space接近阶段。if (status == AVPStatus::eForwarding) // approaching the parking space接近阶段。if (status == AVPStatus::eForwarding) // approaching the parking space接近阶段。

handsomeboyou的博客 1131

ASP.NET Core MVC中的路由

文章目录ASP.NET Core MVC中的路由ASP.NET Core MVC中的默认路由UseMvcWithDefaultRoute()方法中的代码了解默认路由ASP.NET Core MVC中的属性路由属性路由示例属性路由参数属性路由可选参数控制器和操作方法名称属性路由支持多层在属性路由中自定义路由常规路由与属性路由对比ASP.NET Core 中新增的路由中间件路由中间件UseRouting路由中间件UseEndpoints ASP.NET Core MVC中的路由 ​ ASP.NET Core中

断点_C的博客 1566

论文必备 - YOLO26热力图可视化,支持指定模型,指定显示层,设置置信度,以及9种可视化实现方式

本文带来的是YOLO26热力图可视化功能,支持指定模型,指定显示层,设置置信度,以及9种可视化实现方式。我们经常看到一些论文里绘制了不同的热力图,一方面能够直观的感受其模型的有效性,另一方面也丰富了论文内容。特别是在使用了注意力模块的网络中,热力图就可以验证注意力机制是否真正聚焦到了预期的重要特征上,以便对模型的有效性和合理性进行评估。例如Centralized Feature Pyramid for Object Detection这篇文章中展示的,就很能够表达作者改进后的模型相比之前模型的优越性。在项目

Limiiiing的博客 429

【Simulink教程案例9】基于simulink的BPSK,QPSK调制解调通信系统建模与仿真——使用simulink自带模块设计

BPSK (Binary Phase Shift Keying)-------二进制相移键控。是把模拟信号转换成数据值的转换方式之一,利用偏离相位的复数波浪组合来表现信息键控移相方式。BPSK使用了基准的正弦波和相位反转的波浪,使一方为0,另一方为1,从而可以同时传送接受2值(1比特)的信息。BPSK的映射关系如下所示:BPSK调制过程将输入的1010二进制数据中的0都转化为-1,使得非极性码变为极性码。

FPGA/MATLAB学习教程/源码/项目合作开发 3483

026 Map, MapGet, MapPost

Map, MapGet, MapPost

医药/LIMS实验室IT · Office自动化 · .NET+Vue全栈 · 鸿蒙实战 · 欢迎技术交流 642

ArcGIS实验教程——实验二十五:大型商场选址经典案例

本实验基于ArcGIS平台进行商场选址分析,综合考虑道路、居民点、停车场和已有商场四个影响因素。通过缓冲区分析建立各要素的影响范围(道路50米、居民点100米、停车场100米、已有商场500米),采用叠加分析中的相交和擦除运算确定最优选址区域。实验建立了区位评价体系,通过属性赋值(1/-1)和联合运算生成综合评价结果,并实现分级可视化显示。注意事项包括距离参数设置对结果的影响以及正确选择空间分析工具。该流程为商业选址提供了科学的GIS解决方案。

智慧空间实验室 1万+

UseEndpoints和MapControllerRoute关系

文件的不同方法中使用它们来完成路由的配置工作,从而为应用程序的不同部分分别配置路由。都是用于配置路由的方法,但它们在应用程序中的不同位置和用途上有一些区别。用于配置应用程序的终结点,其中包括控制器路由作为其中的一部分。用于具体配置MVC框架的控制器路由规则。在ASP.NET Core中,

极客神殿 2515

Apollo Planning决策规划算法代码详细解析 (1):Scenario选择

本文重点讲解Apollo代码中怎样配置Scenario以及选择当前Scenario,Scenario决策是Apollo规划算法的第一步,本文会对代码进行详细解析,也会梳理整个决策流程,码字不易,喜欢的朋友们麻烦点个关注与赞。 在本文你将学到下面这些内容: 规划器planer的种类; 规划器planer的主要函数及逻辑; 场景管理类ScenarioManager的运行机制; 场景注册方法; 场景决策流程,如何选择当前场景 详细的apollo决策规划代码分析 代码具体过程如下: 1、Scenar

自动驾驶Player的博客 1万+

[Dify] -进阶13- 使用“知识库 + 工作流”打造智能推荐系统

本文介绍了在Dify平台上构建智能推荐系统的方法,重点阐述了知识库与工作流技术的结合应用。通过知识库管理RAG流程,实现文档上传、向量嵌入和检索优化;利用工作流设计节点化推荐逻辑,支持并行处理与条件分支。以电话销售话术推荐为例,展示了从数据收集到实时生成的完整流程。该方法具有准确性高、扩展性强、维护简便等优势,可广泛应用于各类推荐场景,实现从数据存储到智能推荐的闭环解决方案。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 1065

asp.net core 3.0 notes 入门 一

asp.net core新手入门Study注解

weixin_42528820的博客 250

【以太网硬件六】1000base-T物理层编码究竟是怎么编的?

详述1000base-T物理层4D-PAM5的编码过程

highman110的博客 5323

ASP.NET Core端点路由中三种路由函数

早先提及了端点路由app.UseEndpoints, 端点路由强调的是端点和路由,其核心目的是将请求落地点与路由寻址方式解耦。 《ASP.NET Core端点路由 作用原理》 这里面有几个容易混淆的函数 •MapControllerRoute•MapDefaultControllerRoute•MapControllers 有什么不同?什么时候该用哪一个? 1. MapControllerRoute Adds endpoints for controller actions to the Mi

秉持Love and share的态度去学习和生活 620

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

还在写冗余Controller?ASP.NET Core 9最小API+端点路由让代码瘦身80%

告别冗长Controller代码,掌握ASP.NET Core 9 的最小 API 与端点路由,轻松构建轻量高效Web应用。适用于微服务、API快速开发场景,减少80%模板代码,提升开发效率。架构简洁、性能更强,值得收藏。

FastProceed的博客 974

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ASP.NET Core端点路由中三种让人困惑的路由函数

早先提及了端点路由app.UseEndpoints, 端点路由强调的是端点和路由,其核心目的是将请求落地点与路由寻址方式解耦。《ASP.NET Core端点路由作用原理》这里面有几...

qq_30236895的博客 818

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

如何用ASP.NET Core 9最小API实现毫秒级响应?端点路由配置的4大禁忌

掌握ASP.NET Core 9的最小API与端点路由优化技巧,实现毫秒级响应。适用于高并发、低延迟场景,揭示配置中的4大常见禁忌,提升性能与稳定性。合理设计路由规则,避免性能瓶颈,值得收藏。

QuickTrans的博客 632

【架构师必读】:深入剖析ASP.NET Core 9端点路由底层原理与高并发设计

掌握ASP.NET Core 9的高性能秘诀,深入解析最小API与端点路由的底层机制。适用于高并发场景,揭示路由匹配优化、中间件管道集成与性能调优核心方法。理解请求处理流程,提升应用响应速度,架构设计更高效。值得收藏。

QuickProceed的博客 664

揭秘ASP.NET Core 9端点路由机制:如何构建超轻量级API接口?

掌握ASP.NET Core 9 的最小 API 与端点路由,轻松构建高性能、低开销的轻量级API。适用于微服务、快速原型等场景,无需控制器即可定义路由,提升开发效率。架构清晰、启动更快,值得收藏。

PixelIsle的博客 708

揭秘ASP.NET Core 9端点路由变革:最小API如何实现性能飞跃?

掌握ASP.NET Core 9 的最小 API 与端点路由新特性,提升Web应用性能。通过简化配置、优化路由匹配机制,适用于高并发轻量级服务场景,实现启动速度与吞吐量双提升。深入解读新特性的核心原理与实战用法,值得收藏。

BreakNexus的博客 572
上一篇: ASP.NET MVC 请求流程:Route
下一篇: asp.net mvc、asp.net url重写 Url Rewrite
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值