【问题标题】:Dynamic Routes from sql database来自 sql 数据库的动态路由
【发布时间】:2017-08-13 04:45:13
【问题描述】:

我对 ASP.NET Core 和路由很陌生,我正在寻找建议。在过去,我会有一个像 CMS 或 page.aspx 这样的页面。

我的主要问题是我将如何在路由之外创建一个唯一的 url,即 www.mydomain.com/test-page 或者他们是否选择了一个子类别 www.mydomain.com/cat/page。

我知道这有点与路线有关,但我不知道如何使它们动态化。任何建议将不胜感激。我正在使用 ASP.NET Core 1.2。

我还希望能够让最终用户能够从某些视图中进行选择,即有点像您可以使用母版页完成的操作。

编辑更正 大家好,抱歉,这是 asp.net 核心应用程序 1.1,而不是下面向我指出的版本 2

我有一个叫做 CMS 控制器的控制器

private solitudeDContext _context;

    public CmsController(solitudeDContext context)
    {
        _context = context;
    }


    public IActionResult GetContent(string slug)
    {

        CmsPages _page = new CmsPages();

        _page= _context.Pages.Where(w=>w.slug==slug).Select(s=>s.Content).Single();


    }
}

CMS 页面的类

public  class CmsPages
{
    [Key]
    public int id { get; set; }

    public string Title { get; set; }

    public string Description { get; set; }

     public string slug { get; set; }

    public string Content { get; set; }

    public string PageView { get; set; }

    public DateTime startDate { get; set; }

    public DateTime EndDate { get; set; }

    public bool isDeleted { get; set; }

    public bool isVisible { get; set; }



    public string Creator { get; set; }

    public PageStatus PageStatuses { get; set; }

}

编辑 2

好的,我尝试了以下

    private solitudeDContext _context;

    public CmsController(solitudeDContext context)
    {
        _context = context;
    }


    public IActionResult GetContent(string slug)
    {

        CmsPages _page = new CmsPages();

       var  _content= _context.Pages.Where(w=>w.slug==slug).Select(s=>s.Content).Single();

        return View();

    }
    public IActionResult Index()
    {

        return View();
    }

在我看来,它只是显示一个空白页面,我是否遗漏了什么我必须对此有一个视图以及 cms 吗?。

        app.UseStaticFiles();
        app.UseIdentity();
        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");


            routes.MapRoute(
              name: "cmsroute",
              template: "{slug}"
              , defaults: new { controller = "Cms", action = "GetContent" }
              );

【问题讨论】:

  • 没有 ASP.NET Core 1.2。仅 1.0.x、1.1.x 和 2.0 预览
  • 上述方法有什么不起作用?使用 slug 似乎是正确的方法,因为您不想在应用程序启动后添加/删除/修改路由表。路由只能在启动时配置,因为频繁更改路由会降低性能
  • 嗨@Tseng 我只是在问什么被认为是最佳实践,如何告诉核心从数据库中获取 slug 并将当前 url 转换为正确的。
  • @Tseng 我进行了编辑以显示对以上版本号的更正,对此感到抱歉。

标签: asp.net-core asp.net-core-mvc


【解决方案1】:

您可以在 Startup.cs 中添加类似这样的路由

routes.MapRoute(
           name: "cmsroute",
           template: "{slug}"
           , defaults: new { controller = "Cms", action = "GetContent" }
           );

请注意,除了构建自己的新 cms 之外,您可能会发现我的项目 cloudscribe.SimpleContent 对您有用,即使您确实想构建自己的,您也可以研究代码并获得有关如何做事的想法

【讨论】:

  • 嗨,乔,我不需要在它自己的方法中添加一些东西来告诉它的路径,谢谢,不,我不能它是内部项目伙伴的东西,你不知道什么是这样的老实说,这只是我使用 ot 网络表单的学习曲线。
  • 我希望能够根据类中名为 PageTemplate 的字段设置视图。
  • template 是要匹配的 url 的模式,参见路由docs.microsoft.com/en-us/aspnet/core/fundamentals/routing的文档
  • 是否会考虑到 slug 脱离域 @joe 的根目录
猜你喜欢
  • 1970-01-01
  • 2013-04-08
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多