【问题标题】:What is the use of the GetVirtualPath method in the IRouter interfaceIRouter接口中的GetVirtualPath方法有什么用
【发布时间】:2019-08-21 18:09:38
【问题描述】:

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

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

我知道RouteAsync 方法会在每个请求时被调用,并且应该自己处理路由。那么GetVirtualPath 方法呢?现在我按照以下思路使用它:

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

目前效果很好。现在是实际问题

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

【问题讨论】:

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


    【解决方案1】:

    第一种方法 GetVirtualPath 由框架在内部使用,以在 HTML.ActionLink 等方法中基于此路由生成 url,第二种方法 RouteAsync 是我们的逻辑真正驻留的地方。

    我们的课程应该这样开始:

    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 方法,直到返回一个非空的 VirtualPathData。

    此外,asp.net核心还有Route类来实现IRouter

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

    【讨论】:

    • 感谢您的回答,但是我会使用什么作为我的默认路由器呢?
    • @Twenty 我不清楚你的问题。参考medium.com/@lucaslra/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 2020-06-07
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多