因此,当您编写自己的路由器时,可以从IRouter
接口实现。迫使您实施以下两种方法。
VirtualPathData GetVirtualPath(VirtualPathContext context)
Task RouteAsync(RouteContext routeContext)
我知道RouteAsync
方法将在每次请求时被调用,并应自行处理路由。那么GetVirtualPath
方法呢?现在,我按照以下方式使用它:
public VirtualPathData GetVirtualPath(VirtualPathContext context)
{
return null;
}
目前可以正常使用。现在是实际问题
答案 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。