Application_Error () не запускается - PullRequest
       15

Application_Error () не запускается

0 голосов
/ 31 августа 2018

У меня есть приложение 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 () сработает. Если я положу его обратно, это не так. На моей локальной машине он работает всегда, когда я нажимаю на лазурь, он перестает работать.

1 Ответ

0 голосов
/ 04 сентября 2018

Атрибут HandleError сработает, и в результате Application_Error не сработает. Поскольку HandleException является частью конвейера MVC, он обработает ошибку и предотвратит ее появление. Причина, по которой это работает локально для меня, заключается в том, что у меня debug="off" в web.config.

Таким образом, мое решение состоит в том, чтобы либо не использовать исключение HandleError, либо написать пользовательское, которое расширяет, а также регистрирует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...