У меня есть приложение MVC 5, и я пытаюсь перехватить любые необработанные ошибки. Для этого я создал метод в Global.asax.cs следующим образом:
protected void Application_Error()
{
MyLogger.Log("some text");
}
Когда я запускаю проект локально, этот метод запускается для 404, 500 и т. Д. Однако, когда я переключаю приложение на Release и помещаю его на сервер, оно обрабатывает 404, но больше не обрабатывает 500. Я создал метод, чтобы выдать ошибку, такую как это:
[HttpGet]
[AllowAnonymous]
public string Error()
{
var s = int.Parse("hello abc 123");
return "Hello World";
}
Сбой метода конечно, поскольку он не может преобразовать текст в int, но Application_Error () не срабатывает. Если я пытаюсь посетить страницу, которая не существует, она срабатывает, и я вижу ее в журналах.
Я посмотрел на web.config, и в работе это настройка:
<customErrors mode="On" defaultRedirect="~/Error/Index"></customErrors>
Также в filter.config у меня есть:
filters.Add(new HandleErrorAttribute());
если я прокомментирую эту строку выше, активируется моя ошибка Application_Error, и я вижу журнал. Тем не менее, страница больше не перенаправляет на мою страницу ошибки. Вместо этого я получаю белый экран со следующим сообщением:
Невозможно отобразить страницу, поскольку произошла внутренняя ошибка сервера.
Мой вопрос:
Почему веб-сайт перестает обрабатывать 404 ошибки, когда я запускаю веб-сайт в работу с вышеуказанным параметром web.config. Как сделать так, чтобы эти ошибки фиксировались?
РЕДАКТИРОВАТЬ: я свел проблему к следующему: если я закомментирую атрибут HandleError, то мой метод Application_Error () сработает. Если я положу его обратно, это не так. На моей локальной машине он работает всегда, когда я нажимаю на лазурь, он перестает работать.