【发布时间】:2022-09-27 16:09:17
【问题描述】:
我需要建立一个类似 CMS 的网站。
我有一个后端(管理网站),用户可以在其中为前端创建或更新页面(这将是 2 个不同的网站,但都是 .Net Core 6 MVC)
我已经使用 Asp.Net MVC 通过直接操作 Front 的 RouteCollection 来完成此操作。后端正在调用前端的操作,该操作正在创建/更新所需的路由以进行 url 重写)
在这里,我如何定义 Front 中所有页面的 Route url:
var pages = _pageService.GetAll();
foreach (CmsPage page in pages)
{
routeCollection.MapRoute(
name: $\"page-{page.PageId}\",
url: page.url,
defaults: new
{
controller = \"PageController\",
action = \"Detail\",
id = page.PageId,
}
);
}
这样,在 Razor 中,我可以轻松地列出所有页面的链接,如下所示:
@foreach (CmsPage page in Pages)
{
<a href=\"@Url.RouteUrl(\"page-\" + page.PageId)\">@page.Title</a>
}
如果 Backend 中的用户想要更改 Page 的 slug,Backend 会调用 Front,以便他可以更改 RouteCollection 中所需的条目并更新 slug :
protected void UpdateRouteFromRouteTable(string routeName, string newUrl)
{
// Get the route by name
var route = RouteTable.Routes[routeName];
using (RouteTable.Routes.GetWriteLock())
{
((Route)(route)).Url = newUrl;
}
}
通过这样做,页面的 slug 会在 Front 上更新。
这在 .Net Core 中不再可能,但我需要实现相同的目标。
我应该去哪里看?我读到了DynamicRouteValueTransformer,但它似乎不是我要找的东西,似乎也不是 Microsoft.AspNetCore.Rewrite.RewriteContext...
有什么提示吗?
多谢
标签: c# routes url-rewriting asp.net-core-mvc