如何使用端点路由动态解析控制器?

How to dynamically resolve controller with endpoint routing?

升级到 asp.net 核心 2.2 在我的爱好项目中有一个我想迁移到的新路由系统。以前我实现了一个自定义 IRouter 以便能够为请求动态设置控制器。传入请求路径可以是任何内容。我将请求与包含 slug 的数据库 table 进行匹配,并查找匹配的数据容器 class 类型以查找已解析的 slug。之后,我解析了一个可以处理请求的控制器类型,并将 RouteData 值设置为当前的 HttpContext 并将其传递给 IRouter 的默认实现,一切正常。

IRouter 的自定义实现:

public async Task RouteAsync(RouteContext context)
    {
        var requestPath = context.HttpContext.Request.Path.Value;
        var page = _pIndex.GetPage(requestPath);

        if (page != null)
        {
            var controllerType = _controllerResolver.GetController(page.PageType);
            if (controllerType != null)
            {
                var oldRouteData = context.RouteData;
                var newRouteData = new RouteData(oldRouteData);

                newRouteData.Values["pageType"] = page.PageType;
                newRouteData.Values["controller"] = controllerType.Name.Replace("Controller", "");
                newRouteData.Values["action"] = "Index";

                context.RouteData = newRouteData;

                await _defaultRouter.RouteAsync(context);
            }
        }
    }

处理特定页面类型的控制器。

public class SomePageController : PageController<PageData>
{
    public ActionResult Index(PageData currentPage)
    {
        return View("Index", currentPage);
    }
}

然而,当我试图弄清楚如何使用新系统解决它时,我遇到了困难。我不确定我应该在哪里为这种行为扩展它。我不想关闭端点路由功能,因为我看到了学习一些东西的机会。如果可能的话,我将不胜感激。

在ASP.NET 3.0 中有一个新的动态控制器路由系统。您可以实施 DynamicRouteValueTransformer.

文档正在制作中,查看 github issue