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模式相关推荐

  1. vue 刷新嵌套路由_vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法...

    解决vue-router嵌套路由(子路由)在history模式下刷新无法渲染页面的问题,具体内容如下 一. 异常描述 本来使用的是vue-router的hash模式,但是hash模式下url需要带&q ...

  2. Vue 的路由实现 Hash模式 和 History模式

    Hash 模式: Hash 模式的工作原理是onhashchange事件,Window对象可以监听这个事件... 可以通过改变路径的哈希值,来实现历史记录的保存,发生变化的hash 都会被浏览器给保存 ...

  3. .net core i上 K8S(五).netcore程序的hostip模式

    正文 上一章讲了pod的管理,今天再分享一个pod的访问方式 1.Pod的HostIP模式 Pod的HostIP模式,可以通过宿主机访问pod内的服务,创建yaml文件如下 apiVersion: v ...

  4. 数据源管理 | 主从库动态路由,AOP模式读写分离

    本文源码:GitHub·点这里 || GitEE·点这里 一.多数据源应用 1.基础描述 在相对复杂的应用服务中,配置多个数据源是常见现象,例如常见的:配置主从数据库用来写数据,再配置一个从库读数据, ...

  5. history 改成 模式_前端路由三种模式

    hash:任何情况下都可以做前端路由,缺点是SEO不友好(服务器收不到hash,浏览器是不会把#后面的内容发给服务器) history模式:后端将所有前端路由都渲染到同一个页面(不能是404页面),缺 ...

  6. reactrouter监听路由变化_前端路由三种模式

    hash:任何情况下都可以做前端路由,缺点是SEO不友好(服务器收不到hash,浏览器是不会把#后面的内容发给服务器) history模式:后端将所有前端路由都渲染到同一个页面(不能是404页面),缺 ...

  7. 前端路由: hash history 模式

    一. history 模式 history原理: 利用H5的 history中新增的两个API pushState() 和 replaceState() 和一个事件onpopstate pushSta ...

  8. 路由器AP、路由、桥接模式有什么区别【详细介绍】

    现在的路由大多数已经开始支持多种网络连接模式,那么我们就挑一款模式最全的路由来了解各种模式的区别吧!下文将以TP-Link迷你无线路由器为例.在TP-Link迷你无线路由器上一般有AP(接入点)模式. ...

  9. 斐讯N1的OpenWrt设置(含N1当主路由兼AP模式)

    目录 旁路由设置 有以下几种情况: 1.主拨号路由当DHCP服务器,负责动态分配ip地址.这样的话只需要在openwrt的网络-接口-lan.均可开启WIFI,详见第三种情况的设置. lan设置成动态 ...

最新文章

  1. 后端 消息 转发_【后端开发】Servlet怎么转发
  2. 详解公用表表达式(CTE)
  3. Python--简单的目录扫描脚本
  4. centos 安装软件
  5. 更安全的Web通信HTTPS
  6. html图片怎么设置行高,html行高怎么设置
  7. SAP License:SAP不便解决的问题之六——采购组在审批策略中的作用
  8. 有关PHP的可变函数
  9. plsql oracle client没有正确安装(plsql连接远程数据库)
  10. php libiconv close_PHP 5.3.10 编译安装时出现 undefined reference to `libiconv' 错误的解决方法...
  11. 电商平台的数据库设计
  12. 3D打印文件制作,以及3D打印机使用
  13. 共模和差模信号及其噪音抑制
  14. Abp Core 添加短信验证码登录(动态密码登录)
  15. springboot + shiro的配置
  16. C语言编程从键盘输入n
  17. php 函数索引 中文索引
  18. date在java中是什么类型_java中date 是什么类型
  19. vvic/搜款网API接口(item_get-根据ID取商品详情)
  20. Neither --kubeconfig nor --master was specified. Using the inClusterConfig. This might not work

热门文章

  1. windows7中文改成英文
  2. 电脑桌面被隐藏怎么处理
  3. PHP单例模式使用clone
  4. 系统分析与设计学习笔记(六)包图
  5. 苹果电脑录屏怎么录内部声音?图文教学,1分钟快速学会
  6. 浅谈数据仓库维度建模
  7. Python接单指南,大学生也能在寝室接单
  8. acme.sh证书申请
  9. 区块链起点——避免你再错过几个亿
  10. 手机登录群晖出现ssl证书不可信_教你申请免费SSL证书以及安全访问群晖的方法教程...