IRouter界面中GetVirtualPath方法的用途是什么

时间:2019-08-21 18:09:38

标签: c# asp.net-core routing asp.net-mvc-routing asp.net-core-3.0

因此,当您编写自己的路由器时,可以从IRouter接口实现。迫使您实施以下两种方法。

  1. VirtualPathData GetVirtualPath(VirtualPathContext context)
  2. Task RouteAsync(RouteContext routeContext)

我知道RouteAsync方法将在每次请求时被调用,并应自行处理路由。那么GetVirtualPath方法呢?现在,我按照以下方式使用它:

public VirtualPathData GetVirtualPath(VirtualPathContext context)
{
    return null;
}

目前可以正常使用。现在是实际问题

  • 我应该那样留吗?
  • 它的目的是什么?
  • 它应该包含什么代码?

1 个答案:

答案 0 :(得分:1)

框架内部使用第一种方法GetVirtualPath生成基于该路由的url,例如HTML之类的方法。第二种方法RouteLink是ActionLink,这是我们的逻辑将真正驻留的位置。

我们的课应该以这样的开头:

public class MyRouter : IRouter
{
    private readonly IRouter _defaultRouter;

    public MyRouter (IRouter defaultRouter)
    {
        _defaultRouter = defaultRouter;
    }

    public VirtualPathData GetVirtualPath(VirtualPathContext context)
    {
        return _defaultRouter.GetVirtualPath(context);
    }

    public async Task RouteAsync(RouteContext context)
    {
    } 
}

URL generation with LinkGenerator

  

URL生成是路由可以基于一组路由值创建URL路径的过程。这样可以在路由处理程序和访问它们的URL之间进行逻辑分隔。

     

URL生成遵循类似的迭代过程,但它始于调用路由集合的GetVirtualPath方法的用户或框架代码。每条路由都依次调用其GetVirtualPath方法,直到返回非null的VirtualPathData。

此外,asp.net核心具有Route类以实现IRouter

  

路由提供Route类作为IRouter的标准实现。当调用RouteAsync时,Route使用路由模板语法来定义与URL路径匹配的模式。调用GetVirtualPath时,Route使用相同的路由模板来生成URL。