搭建网站需要什么,公司装修办公楼,ae,演出备案在哪里查询本文通过一张图来看一下路由的配置以及请求处理的机制。 一、概述路由主要有两个主要功能#xff1a;将请求的URL与已定义的路由进行匹配#xff0c;找到该URL对应的处理程序并传入该请求进行处理。根据已定义的路由生成URL这两个功能看起来这两个是相反的。A.路由的配置路由… 本文通过一张图来看一下路由的配置以及请求处理的机制。 一、概述路由主要有两个主要功能将请求的URL与已定义的路由进行匹配找到该URL对应的处理程序并传入该请求进行处理。根据已定义的路由生成URL这两个功能看起来这两个是相反的。A.路由的配置路由的两个功能都离不开一个基本的操作路由的基本配置。在Startup中默认通过 routes.MapRoute(name: default,template: {controllerHome}/{actionIndex}/{id?})定义当然我们还可以继续 routes.MapRoute(。。。); 这样就定义了一系列的路由匹配方式组成一个路由表例如这样每一个MapRoute会生成一个Route第二个MapRoute看起来有些特殊我们可以传入一个自定义的RequestDelegate本例为MyRouteHandler.Handler来处理“flylolo/{code}/{name}”这样的请求它会被封装成一个RouteHandlernew RouteHandler(MyRouteHandler.Handler)赋值给Route的target属性而对于另外两种没有指定的Route的target属性默认会被指定为MvcRouteHandler 如下图B.Handler的选择当请求进入之后根据此路由表对该URL进行逐一匹配并将请求交给匹配到的路由的target即MvcRouteHandler或RouteHandler调用 span classcnblogs_code stylemargin-top: 5px;margin-bottom: 5px;padding: 3px;background-color: rgb(245, 245, 245);border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);overflow: auto;color: rgb(0, 0, 0);font-family: !important; courier 12px_target.RouteAsync(context); 在这个方法中若是MvcRouteHandler会对请求的Controller和Action验证若验证成功则对context是一个RouteContext的Handler属性赋值一个匿名方法若是RouteHandler则会直接将其封装的RequestDelegate本例为MyRouteHandler.Handler赋值给RouteContext.Handler.C.请求处理经过Handler的选择后若RouteContext.Handler不为空则调用RouteContext.Handler(HttpContext)对请求进行处理。D.其他回想一下中间件这个是不是和app.Map(/test, XXHandle)这样配置中间件的方式有点像当请求路径是/test的时候请求交由XXHandle处理同样是Map对比着更容易理解。下面通过一张图看一下路由配置和请求处理的流程。二、流程及解析 为了方便查看对几个“重点对象”做了颜色标识点击图片可以看大图 路由的初始化配置一切从Startup开始之前在中间件的文章中介绍过一般是通过多个UseXXX的方式将多个中间件组成“请求处理管道”而在这里通过UseMvc方法进行配置传入routes.MapRoute(...)这样的一个或多个配置。接下来会New一个RouteBuilder顾名思义就是一个Route的创建者通过调用传进来的一个或多个routes.MapRoute()方法生成多个Route并配置默认的Handler。①调用RouteBuilder的Build方法生成一个RouteCollection。②RouteCollection实现IRouteCollection和IRouter接口他是在Startup中的配置组成的集合。③RouterMiddleWare就是专门用于进行路由处理的中间件在此将RouteCollection作为中间件RouterMiddleWare的参数并将这个中间件插入管道中。2. 请求处理流程 ④请求的处理流程在RouterMiddleWare的invoke()方法中。 ⑤请求首先会被封装成一个RouteContext本质就是将httpContext、_router(也就是RouteCollection)包装到一个对象里。 ⑥调用_router(也就是RouteCollection)的RouteAsync(context)方法在其中遍历每一个路由 ⑦若与请求URL匹配则将对应的Handler赋值给context.Handler。 ⑧在RouterMiddleWare的invoke()方法中调用新赋值的context.Handler处理HttpContext;三、其他 由于文章写的比较早各种原因一直没有写完现在发现2.2版本之后启用了新的路由方案还是把这章完成了发出来有愿意看的可以参考一下下一篇文章介绍一下2.2版的新的路由方案至于通过路由生成URL部分就暂时不写了。https://www.cnblogs.com/FlyLolo/p/ASPNETCore2_15.html原文地址:https://www.cnblogs.com/FlyLolo/p/ASPNETCore2_15.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com