是否有mvc路由的好例子,其中每个404页面未找到的请求被路由到MVC中的标准视图,该视图基本上从数据库中提取内容。
答案 0 :(得分:2)
只需将此路线添加到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);
}
}
答案 1 :(得分:1)
以下是一种方法:在Application_Start中的global.asax文件中,您需要设置默认的控制器工厂。用你自己工厂的实例覆盖它。
void Application_Start()
{
ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory());
}
MyControllerFactory
应继承自DefaultControllerFactory
,在选择要使用的控制器时,请在数据库中查找要显示的相应页面。如果页面存在,请选择适当的控制器并覆盖requestContext.RouteData
集合中的操作,以指向显示动态页面的相应操作。
如果请求的页面不存在,请将对基本方法的调用传回给它,并让它按照通常的方式执行。
还有其他方法可以做到这一点,但是这个方法应该有效,并允许您在点击404页面之前拦截请求。
答案 2 :(得分:0)
修改web.config文件,您可以Reference to this page查看web.config部分中的设置自定义错误页面。