【发布时间】: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