在MVC-5中,我可以通过访问RouteTable.Routes
在初始启动后编辑routetable
。我希望在MVC-6中做同样的事情,这样我就可以在运行时添加/删除路由(用于CMS)。
在MVC-5中执行此操作的代码为:
using (RouteTable.Routes.GetWriteLock())
{
RouteTable.Routes.Clear();
RouteTable.Routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
RouteTable.Routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
但我在MVC-6中找不到RouteTable.Routes
或类似的东西。你知道我如何在运行时仍然可以改变路由收集吗?
例如,当在CMS中创建页面时,我想使用这个原则来添加额外的url。
如果你有一个这样的类:
public class Page
{
public int Id { get; set; }
public string Url { get; set; }
public string Html { get; set; }
}
和一个控制器,比如:
public class CmsController : Controller
{
public ActionResult Index(int id)
{
var page = DbContext.Pages.Single(p => p.Id == id);
return View("Layout", model: page.Html);
}
}
然后,当页面添加到数据库中时,我会重新创建routecollection
var routes = RouteTable.Routes;
using (routes.GetWriteLock())
{
routes.Clear();
foreach(var page in DbContext.Pages)
{
routes.MapRoute(
name: Guid.NewGuid().ToString(),
url: page.Url.TrimEnd('/'),
defaults: new { controller = "Cms", action = "Index", id = page.Id }
);
}
var defaultRoute = routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
通过这种方式,我可以向CMS添加不属于约定或严格模板的页面。我可以添加一个带有url /contact
的页面,也可以添加一个带有url /help/faq/how-does-this-work
的页面。
https://stackoverflow.com/questions/32565768
复制相似问题