asp.net-core - 如何使用端点路由动态解析控制器?
问题描述
在我的爱好项目中升级到 asp.net core 2.2 有一个我想迁移到的新路由系统。以前我实现了一个自定义 IRouter 以便能够为请求动态设置控制器。传入的请求路径可以是任何东西。我将请求与包含 slug 的数据库表进行匹配,它会为已解析的 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
推荐阅读
- mysql - MySQL root user password change automation
- pine-script - TradingView 基于多个条件的松树图箭头
- python - Django 应用程序无法使用“firebase-admin”库在 AWS ElasticBeanstalk 上部署
- google-cloud-platform - 向谷歌云中的大查询表插入数据时出错?
- ruby-on-rails - 上限部署在预编译资产上失败,但上限
部署:预编译:资产工作 - git - 这个 Git 设置来自哪里?
- php - 尝试根据不同的表格打印编写计数查询循环
- objective-c - 如何将 NSMutable 数组附加到现有文件
- r - How to completely remove renv from an R statistics program
- ssh - how to create a dynamic port forwarding with several hops?