在我的业余项目中升级到asp.net core 2.2,有一个我想迁移到的新路由系统。以前,我实现了自定义IRouter,以便能够为请求动态设置控制器。传入的请求路径可以是任何东西。我将请求与包含块的数据库表进行匹配,它为已解决的块查找匹配的数据容器类类型。之后,我解析一个可以处理请求的控制器类型,并将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);
}
}
但是,当我试图弄清楚如何使用新系统解决该问题时,我陷入了困境。我不确定该将其扩展到何处。我不想关闭端点路由功能,因为我看到了学习一些东西的机会。如果可能,我也希望代码示例。
答案 0 :(得分:0)
在ASP.NET 3.0中,有一个新的动态控制器路由系统。您可以实现DynamicRouteValueTransformer
。
文档即将发布,请查看github issue