在我的web.config中,我有:
<system.web>
<customErrors mode="On" defaultRedirect="Error.cshtml" />
</system.web>
在Views / Shared / Error.cshtml中,我有:
@model System.Web.Mvc.HandleErrorInfo
@{
ViewBag.Title = "Error";
}
<h2>
Sorry, an error occurred while processing your request.
</h2>
如果我将无效的网址/路由放入浏览器,我会收到:
>应用程序中的服务器错误。无法找到资源。
描述:HTTP 404.您正在查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用。请查看以下网址,确保拼写正确。
请求的网址:/Error.cshtml
为什么找不到Error.cshtml?该文件肯定在Views / Shared中。
答案 0 :(得分:8)
defaultRedirect不会直接转到视图。您的defaultRedirect看起来像一个无法处理的剃刀视图文件。例如:它从哪里获得模型?它不是也不能在配置文件中指定,因此它无法处理视图。
如果您想在MVC中使用更多动态错误页面,可能需要阅读custom error pages and error handling in MVC 3
答案 1 :(得分:5)
它对我有用。只需在web.config中进行此更改:
<system.web>
<customErrors mode="On" defaultRedirect="~/Views/Shared/Error.cshtml">
</customErrors>
</system.web>
答案 2 :(得分:3)
将web.config编辑为:
<system.web>
<customErrors mode="On" defaultRedirect="/Home/Error" />
</system.web>
如果您使用asp.net mvc 1.0或2.0,则应为每个控制器添加HandleError属性:
[HandleError]
public class HomeController: Controller
{
public ActionResult Error()
{
return View();
}
}
如果你使用asp.net mvc 3.0:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalFilters.Filters.Add(new HandleErrorAttribute());
}
}
答案 3 :(得分:2)
您应该使用[HandleError]
属性标记控制器操作,或将其注册为全局过滤器
修改强> 它发生的原因是自定义错误'重定向功能属于ASP.NET基础结构,对ASP.NET MVC一无所知。
您应该创建单独的控制器来管理重定向,并在Web.config中指定它的URL。或者你可以创建静态html文件并将其放入根目录(或除了Views目录之外的任何地方)
答案 4 :(得分:1)
一个解决方案是创建ErrorController
public class ErrorController : Controller
{
//
// GET: /Error/
public ActionResult Error()
{
return View();
}
public ActionResult Error404()
{
return View("Error");
}
}
更改Web.config