NetCore路由的Endpoint模式
IdentityServer里有各种Endpoint,如TokenEndpoint,UserInfoEndpoint,Authorize Endpoint,Discovery Endpoint等等。Endpoint从字面意思来看是“终端节点"或者“终节点”的意思。无独有偶NetCore的路由也有Endpoint的概念。那么我们提出一个问题来,究竟什么是Endpoint?
先来看一段代码,如下所示:
View Code
上面的代码很清晰,如果路由格式匹配”weather/{city}/{year}.{month}.{day}”,那么就调用WeatherForecast方法,这里的app.UseRouting().UseEndpoints就用到了Endpoint模式。要了解Endpoint,我们需要抽丝剥茧一步一步了解几个类的方法:
1.我们先看最里面的endpoints =>endpoints.MapGet("weather/{city}/{year}.{month}.{day}", WeatherForecast),这里实际上调用的是EndpointRouteBuilderExtensions类的MapGet方法,代码如下所示:
View Code
在这里我们重点看看下面签名的方法:
View Code
在这个方法里有一个实例化RouteEndpointBuilder的语句:
var builder = new RouteEndpointBuilder(requestDelegate,pattern,defaultOrder){DisplayName = pattern.RawText ?? pattern.DebuggerToString(),};
其中RouteEndpointBuilder从字面意思看得出,就是RouteEndpoint的创建者,我们看下它的代码:
View Code
再来看下Endpoint的代码:
View Code
从Build()方法看得出,它利用路由匹配的RoutePattern,生成一个RouteEndpoint实例。RouteEndpoint叫做路由终点,继承自Endpoint。Endpoint有一个重要的RequestDelegate属性,用来处理当前的请求。看到这里,我们开始推断:所谓的Endpoint,无非就是用要匹配的pattern,构造一个RouteEndpoint的过程,其中RouteEndpoint继承自Endpoint。NetCore无非就是利用这个RouteEndpoint来匹配当前的Url,如果匹配得上,就执行RequestDelegate所代表的方法,上文就是WeatherForecast方法,如果匹配不上,则不执行WeatherForecast方法,仅此而已。
2.为了验证,我们再来看 app.UseRouting().UseEndpoints(),实际上调用的是EndpointRoutingApplicationBuilderExtensions类的两个方法:
View Code
2-1首先看UseRouting()方法,这个方法其实就是调用EndpointRoutingMiddleware中间件进行Endpoint的匹配,我们可以看下它的几个方法:
View Code
从Invoke方法看得出来,它根据当前的HttpContext进行Endpoint的匹配,如果当前的HttpContext路由格式匹配成功,那么将当前HttpContext传递给下一个中间件处理,这个从SetRoutingAndContinue方法看得出来。
2-2其次看下UseEndpoints()方法,这个方法就是调用EndpointMiddleware中间件,对上面匹配成功的HttpContext进行处理,并调用HttpContext的EndPoint的RequestDelegate处理当前请求。我们重点看下它的Invoke方法,重点关注var requestTask = endpoint.RequestDelegate(httpContext):
View Code
总结:从上面的分析,我们粗略的了解了netcore路由的Endpoint模式其实就是一种用匹配模式构建的终端节点,它主要用来对HttpContext进行路由的匹配,如果匹配成功,则执行Endpoint上的RequestDelegate方法。
NetCore路由的Endpoint模式相关推荐
- vue 刷新嵌套路由_vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法...
解决vue-router嵌套路由(子路由)在history模式下刷新无法渲染页面的问题,具体内容如下 一. 异常描述 本来使用的是vue-router的hash模式,但是hash模式下url需要带&q ...
- Vue 的路由实现 Hash模式 和 History模式
Hash 模式: Hash 模式的工作原理是onhashchange事件,Window对象可以监听这个事件... 可以通过改变路径的哈希值,来实现历史记录的保存,发生变化的hash 都会被浏览器给保存 ...
- .net core i上 K8S(五).netcore程序的hostip模式
正文 上一章讲了pod的管理,今天再分享一个pod的访问方式 1.Pod的HostIP模式 Pod的HostIP模式,可以通过宿主机访问pod内的服务,创建yaml文件如下 apiVersion: v ...
- 数据源管理 | 主从库动态路由,AOP模式读写分离
本文源码:GitHub·点这里 || GitEE·点这里 一.多数据源应用 1.基础描述 在相对复杂的应用服务中,配置多个数据源是常见现象,例如常见的:配置主从数据库用来写数据,再配置一个从库读数据, ...
- history 改成 模式_前端路由三种模式
hash:任何情况下都可以做前端路由,缺点是SEO不友好(服务器收不到hash,浏览器是不会把#后面的内容发给服务器) history模式:后端将所有前端路由都渲染到同一个页面(不能是404页面),缺 ...
- reactrouter监听路由变化_前端路由三种模式
hash:任何情况下都可以做前端路由,缺点是SEO不友好(服务器收不到hash,浏览器是不会把#后面的内容发给服务器) history模式:后端将所有前端路由都渲染到同一个页面(不能是404页面),缺 ...
- 前端路由: hash history 模式
一. history 模式 history原理: 利用H5的 history中新增的两个API pushState() 和 replaceState() 和一个事件onpopstate pushSta ...
- 路由器AP、路由、桥接模式有什么区别【详细介绍】
现在的路由大多数已经开始支持多种网络连接模式,那么我们就挑一款模式最全的路由来了解各种模式的区别吧!下文将以TP-Link迷你无线路由器为例.在TP-Link迷你无线路由器上一般有AP(接入点)模式. ...
- 斐讯N1的OpenWrt设置(含N1当主路由兼AP模式)
目录 旁路由设置 有以下几种情况: 1.主拨号路由当DHCP服务器,负责动态分配ip地址.这样的话只需要在openwrt的网络-接口-lan.均可开启WIFI,详见第三种情况的设置. lan设置成动态 ...
最新文章
- 后端 消息 转发_【后端开发】Servlet怎么转发
- 详解公用表表达式(CTE)
- Python--简单的目录扫描脚本
- centos 安装软件
- 更安全的Web通信HTTPS
- html图片怎么设置行高,html行高怎么设置
- SAP License:SAP不便解决的问题之六——采购组在审批策略中的作用
- 有关PHP的可变函数
- plsql oracle client没有正确安装(plsql连接远程数据库)
- php libiconv close_PHP 5.3.10 编译安装时出现 undefined reference to `libiconv' 错误的解决方法...
- 电商平台的数据库设计
- 3D打印文件制作,以及3D打印机使用
- 共模和差模信号及其噪音抑制
- Abp Core 添加短信验证码登录(动态密码登录)
- springboot + shiro的配置
- C语言编程从键盘输入n
- php 函数索引 中文索引
- date在java中是什么类型_java中date 是什么类型
- vvic/搜款网API接口(item_get-根据ID取商品详情)
- Neither --kubeconfig nor --master was specified. Using the inClusterConfig. This might not work