Я прочитал много статей и несколько постов (в том числе здесь в 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. Ресурс, который вы ищете (или один из его
зависимости) можно было бы удалить, изменить его имя или
Временно недоступен. Пожалуйста, просмотрите следующий URL и сделайте
уверен, что оно написано правильно.
Запрошенный URL: / Ошибка / Ошибка500
Я бы хотел, чтобы это произошло, когда на каком-либо контроллере произошла ошибка, если код http не был сообщен в web.config, он перенаправляется в представление по умолчанию Error500
В этой статье, например, , она обрабатывает ошибки DbException, но хотела бы обрабатывать ошибки любого типа.
Ошибки типа 404 (страница не найдена) работает отлично. Пользователь перенаправлен на страницу Error404.cshtml