【发布时间】:2009-07-07 13:32:07
【问题描述】:
有没有好的 mvc 路由示例,其中每个 404 页面未找到请求都被路由到 MVC 中的标准视图,该视图基本上从数据库中提取内容。
【问题讨论】:
标签: asp.net-mvc content-management-system
有没有好的 mvc 路由示例,其中每个 404 页面未找到请求都被路由到 MVC 中的标准视图,该视图基本上从数据库中提取内容。
【问题讨论】:
标签: asp.net-mvc content-management-system
只需将此路由添加到 RouteTable 的底部:
routes.MapRoute("DynamicPages", "{*page}", new { Controller = "DynamicPages", Action = "Show", Page = String.Empty });
并创建一个控制器来显示来自 db 的动态页面:
public class DynamicPagesController : Controller
{
public ActionResult Show(string page)
{
var pageContent = DB.GetContentForPage(page);
return Content(pageContent);
}
}
【讨论】:
这是一种方法:在 Application_Start 的 global.asax 文件中,您需要设置默认控制器工厂。用您自己的工厂实例覆盖它。
void Application_Start()
{
ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory());
}
MyControllerFactory 应该从DefaultControllerFactory 继承,并且在选择要使用的控制器时,请在数据库中查找要显示的相应页面。如果页面存在,请选择适当的控制器并覆盖 requestContext.RouteData 集合中的操作以指向显示动态页面的适当操作。
如果请求的页面不存在,则将调用传回基本方法并让它执行通常的操作。
还有其他方法可以做到这一点,但是这个应该可以工作,并允许您在点击 404 页面之前拦截请求。
【讨论】:
修改web.config文件,你可以Reference to this page查看web.config部分的设置自定义错误页面。
【讨论】: