我已经阅读了很多文章和几篇文章(包括这里的stackoverflow),但不知道我做错了什么。
这是我的代码:
的Global.asax.cs
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
ErrorControler.cs
public class ErrorController : Controller
{
public ActionResult Error404()
{
return View();
}
public ActionResult Error500()
{
return View();
}
}
的Web.config
<customErrors mode="On" defaultRedirect="~/Error/Error500">
<error statusCode="404" redirect="~/Error/Error404"/>
</customErrors>
MyController.cs
public ActionResult Index()
{
using (var db = new DataContext())
{
int a = 2, b = 0;
var r = a / b;
return View(r);
}
}
Error500.cshtml
@model System.Web.Mvc.HandleErrorInfo
@{
ViewBag.Title = "Erro";
}
<h2>@ViewBag.Title</h2>
<div id="error-info">
<p>Ocorreu um erro inexperado na página <a class="error-url" href="@Response["aspxerrorpath"]" title="Origem do erro">@Response["aspxerrorpath"]</a></p>
<p>Se o erro persistir, por-favor, entre em contato com os administradores do site.</p>
<div class="error-details">
<p>@Model.Exception.Message</p>
</div>
</div>
当我尝试访问路径/MyController
时,会显示以下消息:
>应用程序中的服务器错误。无法找到资源。
描述:HTTP 404.您正在寻找的资源(或其中一个 依赖项)可能已被删除,其名称已更改,或者是 暂时不可用。请查看以下网址并制作 确保它拼写正确。
请求的网址:/错误/错误500
我希望当任何控制器出现错误时,如果在web.config中未通知http状态代码,则会重定向到默认视图Error500
例如,在this article中,它处理DbException错误,但希望处理任何类型的错误。
404类型的错误(找不到页面)完美无缺。用户被重定向到页面Error404.cshtml
答案 0 :(得分:8)
如果您希望这样做,请从Global.asax
filters.Add(new HandleErrorAttribute());
您基本上必须选择是否希望ASP.NET处理您的错误(web.config中的<customErrors>
部分)或ASp.NET MVC(全局HandleErrorAttribute
操作过滤器,这种方式要求你在web.config中打开自定义错误
或检查handling errors in ASP.NET MVC的替代方法(使用此方法,您仍然必须删除我在Global.asax
中显示的行。)