如果捕获所有路由不匹配,则显示404文件未找到视图

时间:2009-12-21 23:31:57

标签: asp.net asp.net-mvc error-handling asp.net-mvc-routing

我在ASP.NET MVC中有一个全能路由设置,所以我可以捕获/ this-page,/ that-page等。

当您点击页面时,会调用该操作,例如Index(string page),然后针对数据库中的值测试page以确定是否可以找到该页面。如果找不到,我想显示我FileNotFound中的视图ErrorController,我不想重定向,因为我想将网址保持为http://.../page-that-isnt-found,就像StackOverflow一样,如果你给它一个虚假的问题 - (https://stackoverflow.com/questions/zzz-aaa)。

现在我的问题在于找出代码,我已经尝试了两种方法:

[ do page db check ]
if (page == null)
   return RedirectToAction("FileNotFound", "Error");
   // return View("FileNotFound"); // can't opt for a controller ?

我得到的最接近的是RedirectToAction(),但当然它会进行实际重定向,而我的网址指向/错误,这是不希望的行为。我尝试过使用return View(),但似乎我无法指定控制器,只能指定视图名称?

2 个答案:

答案 0 :(得分:1)

更正,通过返回一个View,您指向要呈现的视图名称,而不是ActionMethod。您应该能够创建一个包含404页面内容的视图(在同一控制器的视图或共享视图中)。

希望这有帮助。

答案 1 :(得分:1)

您还可以使用Server.Transfer来保留原始网址。关于如何在asp.net mvc中进行此操作有很好的线索 - How to simulate Server.Transfer in ASP.NET MVC?