转载

ASP.NET Core基本原理(4)-路由

ASP.NET Core基本原理(4)-路由

路由用于映射请求到路由处理程序。路由会在应用程序一启动时进行配置,并且可以从URL中提取值用于请求处理。路由还负责使用ASP.NET应用中定义的路由来生成链接。

路由基础

路由是用来把请求映射到路由处理程序。应用程序一启动就配置了路由,并且可以从URL中提取值用于处理请求。它还负责使用 ASP.NET 应用程序中定义的路由来生成链接。

路由使用Routes类( IRouter 的实现)来:

  • 映射传入的请求到 路由处理程序
  • 生成用于响应中的URL

通常一个应用有一个路由集合。路由集合会按顺序进行处理。请求会在路由集合按照URL matching来进行查找。响应使用路由生成URL。

路由通过 RouterMiddleware 类连接到中间件管道。ASP.NET MVC添加路由到中间件管道作为配置的一部分。

URL匹配

URL匹配是指路由调度传来的请求到一个 处理程序 的一个过程。这个过程通常是基于URL路径中的数据,但也可以扩展到请求中的任何数据。调度请求到不同的处理程序的能力是调节应用大小和复杂度的关键。

传入的请求会进入 RouterMiddleware ,它会按顺序调用每个路由上的 RouteAsync 方法。 IRouter 实例通过设置 RouteContext Handler 为一个不为空的 RequestDelegate 来选择是否处理请求。如果一个处理程序已经设置了路由,那么它将被调用来处理这个请求,并且没有其它的路由再去处理。如果所有的路由都执行了,请求还没有找到处理程序,那么中间件会调用 next ,从而下一个在请求管道中的中间件被会调用。

RouteAsync 的主要输入是和当前请求相关联的 RouteContext HttpContext 。在成功匹配之后, RouteContext.HandlerRouteContext RouteData 会作为输出。

RouteAsync 执行期间,一个成功的匹配会基于一个已经完成的请求处理设置 RouteContext.RouteData 的属性为一个适当的值。当一个路由成功匹配了一个请求时, RouteContext.RouteData 包含关于路由结果的重要的状态信息

RouteData Values 是一个从路由产生的路由值的字典。这些值通常由标记化的URL由确定的,可以用于接受用户的输入,或者用于应用内部更深层次的调度决定。

RouteData DataTokens 是一个与相关匹配路由的附加数据的属包。 DataTokens 提供与每个路由相关联的状态数据的支持。这样应用可以基于匹配的路由延迟作为决定。这个值都是由开发人员定义的,也不会对路由行为产生影响。而且,数据令牌中的数据可以是任何类型。与路由值相比之下,它可以很方便地在字符串之间进行互转。

RouteData Routers 是一个参与成功匹配请求的路由的列表。路由可以彼此嵌套,而且 Routers 属性反映了通过导致匹配的路由的逻辑树的路径。通常, Routers 中的第一项是路由集合,并且应该用来生成URL。 Routers 中的最后一项就是已经匹配的路由。

URL生成

URL生成(URL generation)是指路由可以基于一组路由值创建一个URL路径的过程。这允许你的处理程序和访问它们的URL之间有一个逻辑分离。

URL生成遵循一个类似于迭代的过程,但以用户或者框架代码调用到路由集合的 GetVirtualPath 方法开始。然后,每一个路由将按顺序调用其 GetVirtualPath 方法,直到返回一个非空的 VirtualPathData

GetVirtualPath 主要输入有:

  • VirtualPathContext HttpContext
  • VirtualPathContext Values
  • VirtualPathContext AmbientValues

路由主要使用 ValuesAmbientValues 提供的路由值来决定在哪生成一个URL以及包含什么值。 AmbientValues 是随着路由系统当前请求而产生的一组路由值。相比, Values 是指定怎么去为当前操作生成所期望的URL的路由值。提供 HttpContext 是以防路由需要获取一个服务或者与当前上下文关联的额外数据。

GetVirtualPath 的输出是一个 VirtualPathData 。它包含输出URL的 VirtualPath 以及应当由路由设置的额外属性。

VirtualPathData VirtualPath 属性包含一个路由产生的 虚拟路径 。根据你的需求,你可以需要对该路径作进一步处理。例如,如果你想要在HTML中呈现生成的URL,你需要去预先设置好应用的基本路径。

VirtualPathData Router 是一个成功生成URL路由的参考。

VirtualPathData DataTokens 属性是生成URL的路由的一个附加数据的字典集合。

创建路由

  • ← 上一篇
原文  http://zhuchenglin.me/fundamentals-4-routing
正文到此结束
Loading...