ASP.NET Core 3.x - 为什么采用新的 Endpoint Routing 路由系统

Endpoint Routing 路由系统

ASP.NET Core 3.x 使用了一套叫做 Endpoint Routing 的路由系统。这套路由系统在ASP.NET Core 2.2 的时候就开始露面了。

这套Endpoint Routing路由系统提供了更强大的功能和灵活性,以便能更好的处理请求。

 

早期ASP.NET Core的路由系统

我们先回顾一下早期版本的ASP.NET Core的路由系统:

在早期的ASP.NET Core框架里,HTTP请求进入中间件管道,在管道的结尾处,有一个Router中间件,也就是路由中间件。这个路由中间件会把HTTP请求和路由数据发送给MVC的一个组件,它叫做MVC Router Handler。

这个MVC 路由 Handler就会使用这些路由数据来决定哪个Controller的Action方法应该来负责处理这个请求。

然后 Router中间件就会执行被选中的Action方法,并生成响应,而这个响应就会顺着中间件的管道原路返回。

问题出在哪?

为什么早期的这套路由系统被抛弃了?它有什么问题?

第一个问题就是,在被MVC处理之前,其它的中间件不知道最后哪个Action方法会被选中来处理这个请求。这对像Authorization(授权),Cors这样的中间件会造成很大的困扰,因为他们不能提前知道该请求会被送往哪里。

第二个问题就是,这套流程会把MVC和路由的职责紧密的耦合在一起,而实际MVC的本职工作应该仅仅就是生成响应。

Endpoint Routing 路由系统前来营救

Endpoint routing 路由系统,它把MVC的路由功能抽象剥离出来,并放置到中间件管道里,从而解决了早期ASP.NET Core路由系统的那两个问题。

而在Endpoint Routing 路由系统里,其实一共有两个中间件,它们的名称有点容易混淆,但是你只要记住他们的职责即可:

  1. Endpoint Routing 中间件。它决定了在程序中注册的哪个Endpoint应该用来处理请求。

  2. Endpoint 中间件。它是用来执行选中的Endpoint,从而让其生成响应的。

所以,Endpoint Routing的流程图大致如下:

在这里,Endpoint Routing 中间件会分析进来的请求,并把它和在程序中注册的Endpoints进行比较。它会使用这些 Endpoints 上面的元数据来决定哪个是处理该请求的最佳人选。然后,这个选中的Endpoint 就会被赋给请求的对象,而其它后续的中间件就可以根据这个选中的Endpoint,来做一些自己的决策。在所有的中间件都执行完之后,这个被选中的Endpoint最终将被 Endpoint中间件所执行,而与之关联的Action方法就会被执行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/310917.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 接口缓存,php写的一个缓存接口demo,兼容redis和memcache

/*** 工厂方法模式* -------------* author zhangqian* version v1.0*///缓存接口interface cache {public function init($conf);public function setVal($key , $val);public function getVal($key);public function delVal($key);public function autoIncreament($key);}//m…

《C++ Primer》10.1节练习

练习10.1: #include <iostream> #include <vector> #include <algorithm> using namespace std;int main() {vector<int>vi;int val;vi.push_back(45);vi.push_back(45);vi.push_back(45);vi.push_back(45);for (int i 1; i < 45; i) {vi.push_ba…

ueditor编辑器php上传配置,php版本UEditor编辑器图片上传设置

"savePath" > "../../upload/" , //保存路径注意&#xff0c;这里远程抓取的图片保存在了upload根目录下&#xff0c;要想保存在upload的子目录下&#xff0c;例如每个月份的文件夹下&#xff0c;则需要找到以下代码$savePath $config[ sav…

Asp.Net Core AuthorizeAttribute 和AuthorizeFilter 跟进及源码解读

一、前言IdentityServer4已经分享了一些应用实战的文章&#xff0c;从架构到授权中心的落地应用&#xff0c;也伴随着对IdentityServer4掌握了一些使用规则&#xff0c;但是很多原理性东西还是一知半解&#xff0c;故我这里持续性来带大家一起来解读它的相关源代码&#xff0c;…

日期计算算法训练

知识点: 闰年共有366天&#xff08;1月~12月分别为31天、29天、31天、30天、31天、30天、31天、31天、30天、31天、30天、31天&#xff09;。 题目: 蓝桥杯2015初赛-星系炸弹[蓝桥杯2018初赛]第几天-日期计算(水题)[蓝桥杯2018初赛]星期一-日期计算

1张手稿图讲明白 Kubernetes 是怎么运行的

注意&#xff1a;如果您已经知道Kubernetes的工作原理&#xff0c;那么您可能会对我之前的博文感兴趣&#xff0c;请停止使用具有管理员权限的kubeconfigKubernetes是最初由Google设计的开源工具&#xff0c;现在由 Cloud Native Computing Foundation&#xff08;CNCF&#xf…

java继承层次结构,在状态模式中实现继承层次结构 - java

我有一个与此非常相似的设计&#xff1a;这里的NewOrder&#xff0c;Registered&#xff06;Granted都有通用方法AddOrderline()和Cancel()&#xff0c;因此将这两种方法重构为父类很容易。当我要Cancel一条Shipped行(当前未在图中显示)时&#xff0c;会出现问题。由于发运行不…

枚举算法训练

知识点: 素数-试除法和埃式筛选法模板不要让数组越界&#xff0c;一越界&#xff0c;答案总容易错。 题目: 蓝桥杯2015初赛-方程整数解-枚举 蓝桥杯2015初赛-奇妙的数字 蓝桥杯2015初赛-饮料换购-枚举 蓝桥杯2015初赛-奖券数目-枚举 蓝桥杯2015初赛-三羊献瑞-枚举 蓝桥杯…

就喜欢用vSphere部署K8s集群,不全是因为自动化!

通过努力&#xff0c;我们有了一个完整配置的工作负载域&#xff0c;其中包括一个NSX-T Edge部署。现在&#xff0c;我们准备继续使用Kubernetes 部署vSphere。通过VMware Cloud Foundation 4.0中的SDDC Manager&#xff0c;我们确保NSX-T Edge可用&#xff0c;并且还确保Workl…

模拟算法训练

知识点: C stringstream输入方式C关于getline()和getchar()的小点Csubstr()用法toupper小写变大写 tolower大写变小写有些题目记得开longlong 6.蛇型方向向量写法: int dx[] {0,1,0,-1},dy[] {1,0,-1,0}; int d 0; d (d1)%4;题目: 蓝桥杯2016初赛-有奖猜谜-模拟 蓝桥杯…

同源策略_如何支持跨域

欢迎大家阅读《朝夕Net社区技术专刊》我们致力于.NetCore的推广和落地&#xff0c;为更好的帮助大家学习&#xff0c;方便分享干货&#xff0c;特创此刊&#xff01;很高兴你能成为忠实读者&#xff0c;文末福利不要错过哦&#xff01;01PARTCoreWebApi的调用1.在Core MVC下建立…

php常用linux命令httpd,Linux常用的100个命令

列举一下在使用linux系统时经常使用的几个命令并做简要说明。1、export //查看所有环境变量2、wc -l //统计行数、wc -w 统计单词3、lsattr file //查看文件属性4、cat /etc/passwd |awk -F: ‘{print $1} //查看系统中所有用户5、cat /etc/group //查看系统中所有的组6、echo …

二分算法训练

知识点: 整数二分 题目: 蓝桥杯2017初赛-分巧克力-二分

企业数字化转型解决方案

2020年国务院常务会议明确指出&#xff0c;依托工业互联网促进传统产业加快上线上云。此前&#xff0c;工信部也在全国工业和信息化工作会议上表示&#xff0c;2020年要实施“5G工业互联网”512工程。和5G、人工智能等同列的“新基建”&#xff0c;工业互联网成为数字时代的基础…

网站 asp和php的用途,asp和php都有什么功能?

ASP是什么&#xff1f;有什么功能&#xff1f;ASP.NET是微软开发&#xff0c;建立动态的&#xff0c;强大的&#xff0c;智能的、可扩展的网站和网际网络应用的全功能的程序语言如C或VB.NET #。它包括一个强大的安全评估的亮点&#xff0c;以及一个组织的小工具&#xff0c;可以…

ASP.NET Core 3.x - Endpoint Routing 路由体系的内部机制

Endpoint是什么&#xff1f;Endpoint简单的可以理解为这样的一些类&#xff0c;它们包含一个请求的委托&#xff08;Request Delegate&#xff09;和其它的一些元数据&#xff0c;使用这些东西&#xff0c;Endpoint类可以生成一个响应。而在MVC的上下文中&#xff0c;这个请求委…

前缀和,差分算法训练

知识点: 一维前缀和二维前缀和一维差分二维差分 题目: 蓝桥杯2017初赛-k倍区间-前缀和[蓝桥杯2018初赛]递增三元组-双指针&#xff0c;枚举&#xff0c;排序&#xff0c;前缀和

java获取主机信息大全,网络编程:Java获取网络主机信息

java.net.InetAddress类表示互联网协议 (IP) 地址。有两个子类&#xff1a;Inet4Address&#xff0c; Inet6Address通过 InetAddress可以方便获取一个域名下的IP&#xff0c;也可以获取一个IP的主机名。下面是例子&#xff0c;通过程序查看51cto主机的IP信息&#xff0c;51cto是…

【项目升级】单库、多库、读写分离 · 任你选

本期配套视频&#xff1a;https://www.bilibili.com/video/BV1BJ411B7mn?p6&#xff08;点击阅读原文&#xff0c;可看&#xff0c;如果没有&#xff0c;最晚下午可看&#xff09;继上周增加【任务调度】以后&#xff0c;继续对项目进行2.0版本升级&#xff0c;其实改动的地方…

数论算法训练

知识点: 如果a,b均是正整数且互质&#xff0c;那么由axby&#xff0c;x>0,y>0,那么由这两个数不能组成的最大的数是:a*b-a-b 我们可以发现&#xff0c;模9的时候有这样一个规律: 对X模Y&#xff0c;其实等于X每一位的数的和SUM模Y。 记住&#xff0c;这个方法只能模9的时…