500 Внутренняя ошибка сервера в MVC
Я пытаюсь настроить пользовательские ошибки для сайта MVC. У меня 404 страница работает нормально, но при тестировании ошибки сервера я получаю сообщение по умолчанию:
Произошла ошибка при обработке вашего запроса.
Вместо моей пользовательской страницы.
Я установил это в файле web.config:
<customErrors mode="On" defaultRedirect="~/Error/500">
<error statusCode="404" redirect="~/Error/404" />
<error statusCode="500" redirect="~/Error/500" />
</customErrors>
Мой контроллер ошибок выглядит следующим образом:
public class ErrorController : Controller
{
[ActionName("404")]
public ActionResult NotFound()
{
return View();
}
[ActionName("500")]
public ActionResult ServerError()
{
return View();
}
}
Я тестирую страницу ошибки 500
, вызывая исключение в одном из моих представлений:
[ActionName("contact-us")]
public ActionResult ContactUs()
{
throw new DivideByZeroException();
return View();
}
Почему так обрабатываются только 404 ошибки? Как я могу отобразить страницу ошибки для ошибок 500
?
Ответы
Ответ 1
Выяснил это.
При создании проекта в Global.asax.cs
остался некоторый код шаблона:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
В частности:
filters.Add(new HandleErrorAttribute());
Это создает новый экземпляр HandleErrorAttribute
, который применяется глобально ко всем моим представлениям.
Без настройки, если в представлении появляется ошибка при использовании этого атрибута, MVC отобразит файл Error.cshtml
по умолчанию в папке Shared
, в которую входит: "Sorry, an error occurred while processing your request."
.
Из документации по HandleErrorAttribute:
По умолчанию, когда метод действия с атрибутом HandleErrorAttribute генерирует любое исключение, MVC отображает представление Error, которое находится в папке ~/Views/Shared.
Комментируя эту строку, эта проблема решена и позволила мне использовать собственные страницы ошибок для 500 ошибок.