路由用于映射请求到路由处理程序。路由会在应用程序一启动时进行配置,并且可以从URL中提取值用于请求处理。路由还负责使用ASP.NET应用中定义的路由来生成链接。
路由是用来把请求映射到路由处理程序。应用程序一启动就配置了路由,并且可以从URL中提取值用于处理请求。它还负责使用 ASP.NET 应用程序中定义的路由来生成链接。
路由使用Routes类( IRouter
的实现)来:
通常一个应用有一个路由集合。路由集合会按顺序进行处理。请求会在路由集合按照URL matching来进行查找。响应使用路由生成URL。
路由通过 RouterMiddleware
类连接到中间件管道。ASP.NET MVC添加路由到中间件管道作为配置的一部分。
URL匹配是指路由调度传来的请求到一个 处理程序 的一个过程。这个过程通常是基于URL路径中的数据,但也可以扩展到请求中的任何数据。调度请求到不同的处理程序的能力是调节应用大小和复杂度的关键。
传入的请求会进入 RouterMiddleware
,它会按顺序调用每个路由上的 RouteAsync
方法。 IRouter
实例通过设置 RouteContext Handler
为一个不为空的 RequestDelegate
来选择是否处理请求。如果一个处理程序已经设置了路由,那么它将被调用来处理这个请求,并且没有其它的路由再去处理。如果所有的路由都执行了,请求还没有找到处理程序,那么中间件会调用 next
,从而下一个在请求管道中的中间件被会调用。
RouteAsync
的主要输入是和当前请求相关联的 RouteContext HttpContext
。在成功匹配之后, RouteContext.Handler
和 RouteContext RouteData
会作为输出。
在 RouteAsync
执行期间,一个成功的匹配会基于一个已经完成的请求处理设置 RouteContext.RouteData
的属性为一个适当的值。当一个路由成功匹配了一个请求时, RouteContext.RouteData
包含关于路由结果的重要的状态信息
RouteData Values
是一个从路由产生的路由值的字典。这些值通常由标记化的URL由确定的,可以用于接受用户的输入,或者用于应用内部更深层次的调度决定。
RouteData DataTokens
是一个与相关匹配路由的附加数据的属包。 DataTokens
提供与每个路由相关联的状态数据的支持。这样应用可以基于匹配的路由延迟作为决定。这个值都是由开发人员定义的,也不会对路由行为产生影响。而且,数据令牌中的数据可以是任何类型。与路由值相比之下,它可以很方便地在字符串之间进行互转。
RouteData Routers
是一个参与成功匹配请求的路由的列表。路由可以彼此嵌套,而且 Routers
属性反映了通过导致匹配的路由的逻辑树的路径。通常, Routers
中的第一项是路由集合,并且应该用来生成URL。 Routers
中的最后一项就是已经匹配的路由。
URL生成(URL generation)是指路由可以基于一组路由值创建一个URL路径的过程。这允许你的处理程序和访问它们的URL之间有一个逻辑分离。
URL生成遵循一个类似于迭代的过程,但以用户或者框架代码调用到路由集合的 GetVirtualPath
方法开始。然后,每一个路由将按顺序调用其 GetVirtualPath
方法,直到返回一个非空的 VirtualPathData
。
GetVirtualPath
主要输入有:
VirtualPathContext HttpContext
VirtualPathContext Values
VirtualPathContext AmbientValues
路由主要使用 Values
和 AmbientValues
提供的路由值来决定在哪生成一个URL以及包含什么值。 AmbientValues
是随着路由系统当前请求而产生的一组路由值。相比, Values
是指定怎么去为当前操作生成所期望的URL的路由值。提供 HttpContext
是以防路由需要获取一个服务或者与当前上下文关联的额外数据。
GetVirtualPath
的输出是一个 VirtualPathData
。它包含输出URL的 VirtualPath
以及应当由路由设置的额外属性。
VirtualPathData VirtualPath
属性包含一个路由产生的 虚拟路径
。根据你的需求,你可以需要对该路径作进一步处理。例如,如果你想要在HTML中呈现生成的URL,你需要去预先设置好应用的基本路径。
VirtualPathData Router
是一个成功生成URL路由的参考。
VirtualPathData DataTokens
属性是生成URL的路由的一个附加数据的字典集合。