2017-08-12 63 views
0

我对ASP.NET Core和路由非常陌生,我在寻找建议。在过去,我会有一个页面,如CMS或page.aspx来自sql数据库的动态路由

我的主要问题是我将如何去创建一个独特的网址离线,即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" } 
      ); 
+0

没有ASP.NET Core 1.2。只有1.0.x,1.1.x和2.0预览 – Tseng

+1

还有什么**不工作**与上述方法?使用slug似乎是正确的方法,因为一旦应用程序启动,您不想添加/删除/修改路由表。路由只应该在启动时配置,因为经常更改路由是性能不佳 – Tseng

+0

您好@Tseng我只是问什么被认为是最佳实践如何告诉核心从数据库获取slug并将当前url转换为正确的一个。 – david

回答

3

您只需即使你添加的路由这样的事情在Startup.cs

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

还要注意,而不是建立自己的新型农村合作医疗,你可能会发现我的项目cloudscribe.SimpleContent是对你有用,想要建立你自己的,你可以研究代码,并得到如何做事的想法

+0

嗨乔,我不需要在自己的方法中添加一些东西,告诉它的道路谢谢你,没有我不能为它的内部项目队友的东西,你没有什么是这样的情感对我来说只是一个学习曲线说实话,使用webform。 – david

+0

也是什么模板,我希望能够设置基于名为PageTemplate类的字段中的视图。 – david

+0

模板是url匹配的模式,请参阅关于路由的文档https://docs.microsoft.com/en-us/aspnet/core/fundamentals/routing –