【问题标题】:Routing method for a CMS like in .Net Core MVC.Net Core MVC 中 CMS 的路由方法
【发布时间】: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


    【解决方案1】:

    asp.net Core 中的路由与 ASP.Net 不同;

    在 ASP.net 中,注册在 RegisterRoutes 方法中的路由在 global.asax.cs 中的 Application_Start 方法中调用,只有在应用程序启动时才会执行。

    但是,在 asp .net 核心中,路由在中间件中注册(将根据请求调用),所以我认为你的问题应该是如何在 .net 核心中注册路由动态,而不是试图修改注册的路由

    https://learn.microsoft.com/en-us/aspnet/core/fundamentals/middleware/?view=aspnetcore-6.0#create-a-middleware-pipeline-with-webapplication

    【讨论】:

      猜你喜欢
      • 2012-07-30
      • 1970-01-01
      • 2020-04-17
      • 2017-04-06
      • 1970-01-01
      • 2015-06-03
      • 2019-01-02
      • 1970-01-01
      • 2020-06-29
      相关资源
      最近更新 更多