当前位置: 首页 > news >正文

淘宝客手机网站开发重庆网络技术有限公司

淘宝客手机网站开发,重庆网络技术有限公司,深圳宝安区邮编,wordpress谷歌广告不显示ASP.NET Core 从2.2版本开始#xff0c;采用了一个新的名为Endpoint的路由方案#xff0c;与原来的方案在使用上差别不大#xff0c;但从内部运行方式上来说#xff0c;差别还是很大的。上一篇ASP.NET Core;图解路由(2.1 earler)详细介绍了原版路由方案的运行机制#xff… ASP.NET Core 从2.2版本开始采用了一个新的名为Endpoint的路由方案与原来的方案在使用上差别不大但从内部运行方式上来说差别还是很大的。上一篇ASP.NET Core;图解路由(2.1 earler)详细介绍了原版路由方案的运行机制本文仍然通过一幅图来了解一下新版的运行机制最后再总结一下二者的异同点。一、概述       此方案从2.2版本开始被称作终结点路由下文以“新版”称呼它是默认开启的若想采用原来的方案2.1,下文以原版称呼可以在AddMvc的时候进行设置services.AddMvc(optionoption.EnableEndpointRouting false).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);EnableEndpointRouting 默认为true也就是启用新的Endpoint方案设置为false则采用旧版2.1的路由方案。        在配置方法上来说系统仍然采用在Startup中的use.Mvc()中配置而实际上内部的处理中间件已由原来的RouterMiddleware改为EndpointMiddleware和EndpointRoutingMiddleware两个中间件处理下面依旧通过一幅图来详细看一下 二、流程及解析                                                                            图一为了方便查看依然对几个“重点对象”做了颜色标识点击图片可以看大图      1. 路由的初始化配置图的前两个泳道 ①  一切依然是从Startup开始而且和旧版一样是通过UseMvc方法进行配置传入routes.MapRoute(...)这样的一个或多个配置, 不做赘述。下面着重说一下后面的流程看一下MvcApplicationBuilderExtensions中的UseMvc方法② 第6行这里会获取并判断设置的EnableEndpointRouting的值若为false则采用旧版路由详见上一篇文章该值默认为true即采用新版路由。 ③ 对应第9行MvcEndpointDataSource在新版路由中是个非常非常重要的角色在启动初始化阶段它完成了路由表存储和转换此处先用颜色重点标记一下大家记住它在后面的流程中详细介绍。 ④ 对应第16行同旧版的RouteBuilder一样这里会new一个 endpointRouteBuilder二者都是一个IRouteBuilder所以也同样调用configureRoutes(endpointRouteBuilder)方法也就是startup中的配置获取了一个Route的集合IListIRouter赋值给endpointRouteBuilder.Routes这里有个特别该注意的地方if (router is Route route router.GetType() typeof(Route)) 也就是这里只接受route类型终结点路由系统不支持基于 IRouter的可扩展性包括从 Route继承。⑤ 对应第20行这里对刚获取到的endpointRouteBuilder.Routes进行遍历转换成了一个MvcEndpointInfo的集和赋值给mvcEndpointDataSource.ConventionalEndpointInfos。⑥ 之后就是向管道塞中间件了这里的处理中间件由原来的RouterMiddleware改为EndpointMiddleware和EndpointRoutingMiddleware。  2.请求的处理图的后两个泳道       请求的处理大部分功能在中间件EndpointRoutingMiddleware他有个重要的属性_endpointDataSource保存了上文中初始化阶段生成的MvcEndpointDataSource而中间件EndpointMiddleware的功能比较简单主要是在EndpointRoutingMiddleware筛选出endpoint之后调用该endpoint的endpoint.RequestDelegate(httpContext)进行请求处理。 ⑦ InitializeAsync()方法主要是用于调用InitializeCoreAsync()创建一个matcher而通过这个方法的代码可以看出它只是在第一次请求的时候执行一次。   ⑧ MvcEndpointDataSource一个重要的方法UpdateEndpoints()作用是读取所有action并将这个action列表与它的ConventionalEndpointInfos列表见⑤进行匹配最终生成一个新的列表。如下图我们默认情况下只配置了一个{controllerHome}/{actionIndex}/{id?}这样的路由默认的HomeController有三个action添加了一个名为FlyLoloController的controller并添加了一个带属性路由的action最终生成了7个Endpoint这有点像路由与action的“乘积”。当然这里只是用默认程序举了个简单的例子实际项目中可能会有更多的路由模板注册、会有更多的Controller和Action以及属性路由等。                                                      图二具体代码如下本质就是计算出一个个可能被请求的请求终结点也就是Endpoint。由此可见如上一篇文章那样想自定义一个handler来处理特殊模板的方式如 routes.MapRoute(flylolo/{code}/{name}, MyRouteHandler.Handler);将被忽略掉因其无法生成 Endpoint且此种方式完全可以自定义一个中间件来实现没必要混在路由中。            ⑨ 就是用上面生成的Matcher携带Endpoint列表与请求URL做匹配并将匹配到的Endpoint赋值给feature.Endpoint。            ⑩ 获取feature.Endpoint若存在则调用其RequestDelegate处理请求httpContext。 三、新版与旧版的异同点总结简要从应用系统启动和请求处理两个阶段对比说一下两个版本的区别1.启动阶段这个阶段大部分都差不多都是通过Startup的app.UseMvc()方法配置一个路由表一个Route的集合RoutesIListIRouter然后将其简单转换一下2.1:  将Routes转换为RouteCollection2.2 :   将Routes转换为ListMvcEndpointInfo二者区别不大虽然名字不同但本质上还是差不多都仍可理解为Route的集合的包装。2.请求处理阶段2.1:   1. 将请求的URL与RouteCollection中记录的路由模板进行匹配。           2. 找到匹配的Route之后再根据这个请求的URL判断是否存在对应的Controlled和Action。           3. 若以上均通过则调用Route的Handler对HttpContext进行处理。2.2 :   1. 第一次处理请求时首先根据启动阶段所配置的路由集合ListMvcEndpointInfo和_actions.ActionDescriptors.Items所有的action的信息做匹配生成一个列表这个列表存储了所有可能被匹配的URL模板如图二这个列表同样是ListMvcEndpointInfo记录了所有可能的URL模式实际上是列出了一个个可以被访问的详细地址已经算是最终地址了即终结点或许就是为什么叫Endpoint路由的原因。            2.请求的Url和这个生成的表做匹配找到对应的MvcEndpointInfo。            3. 调用被匹配的MvcEndpointInfo的RequestDelegate方法对请求进行处理。二者区别就是对于_actions.ActionDescriptors.Items所有的action的信息的匹配上原版是先根据路由模板匹配后再根据ActionDescriptors判断是否存在对应的Controller和action而新版是先利用了action信息与路由模板匹配然后再用请求的URL进行匹配由于这样的工作只在第一次请求的时候执行所以虽然没有做执行效率上的测试但感觉应该是比之前快的。 原文链接https://www.cnblogs.com/FlyLolo/p/ASPNETCore2_16.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com
http://wiki.neutronadmin.com/news/227594/

相关文章:

  • j2ee大型网站开发框架宝洁公司网站建设案例
  • 软件开发可以做网站么整装公司排名前十强
  • php如何自学做网站即墨今天新闻大事
  • A00网站建设河北廊坊公布新增阳性人员轨迹
  • 怎么知道一个网站的权重永灿网站建设公司
  • 兰州网站排名分析博客seo优化技术
  • 企业建站系统漏洞网络营销是做什么
  • 阿里巴巴网站建设缺点创建全国文明城市我们在行动绘画
  • 蒙牛企业网站建设规划书帮别人发广告赚钱平台
  • 设计比例网站天猫网站建设的目标
  • 男女做那事是什 网站wordpress实现专题
  • 网站开发团队人数构成网站开发流程asp
  • 地方网站建设方案广州网站建设联系电话
  • 做调像什么网站找活品牌展示型网站源码
  • 苏州教育学会网站建设十大手游折扣平台app
  • 网站对接如何做青岛城乡建筑设计院有限公司
  • 自做美食哪些网站石家庄局域网网站建设
  • 备案网站可以做论坛么网站带数据库下载
  • 百度网站是百度公司做的吗东莞网页设计
  • 长春哪家做网站便宜wordpress付费查看内容
  • 免费做网站视频ie不能显示wordpress图片
  • 东莞做一个企业网站中国设计师排名
  • 科技园区建设网站的意义宁波网络公司在哪里
  • .net开发微信网站流程中国空间站完整图
  • 北京手机网站搭建费用同一个服务器的网站做友情链接
  • 珠海中企网站建设巩义网站建设托管
  • 临沂品牌网站建设公司技术社区网站开发
  • 基于python网站开发西安网站建设云阔网络
  • html怎么设置网站吗芜湖做网站多少钱
  • 重庆网站建设多少钱广州企业网站建设公司哪家好