Как обработать ошибку приложения ASP.NET, которая происходит на приложении, запускают и передают и отображают ошибку в представлении MVC?

Я знаю, что ASP.NET, MVC имеет ошибочный фильтр, приписывает определенному ошибочному типу дескриптора. Однако эта функция не может зафиксировать ошибку, которая происходит, когда приложение запускается. Поэтому я должен добавить некоторый код к методу “Application_Error” для обработки этой ошибки как следующий код.

public void Application_Error(object sender, EventArgs e)
{
    // At this point we have information about the error
    var ctx = HttpContext.Current;

    var exception = ctx.Server.GetLastError();

    var errorInfo =
       "<br>Offending URL: " + ctx.Request.Url +
       "<br>Source: " + exception.Source +
       "<br>Message: " + exception.Message +
       "<br>Stack trace: " + exception.StackTrace;

    ctx.Response.Write(errorInfo);

    Server.ClearError();
}

Хотя, этот код будет хорошо работать, когда нормальная ошибка приложения произойдет как ошибка, которая происходит в поле зрения страница. Тем не менее, это не работает, когда ошибка происходит на запуске приложения, потому что запрос и объекты ответа являются всегда пустыми.

Затем, я пытаюсь решить этот вопрос путем установки перенаправления по умолчанию по пользовательским ошибкам как следующий код.

<customErrors mode="On" defaultRedirect="Scripts/ApplicationError.htm"></customErrors>

К сожалению, это не работает, потому что, когда приложение получают перенаправленный запрос, оно пытается запустить приложение снова, и это выдает исключение снова.

Как делают для решения этой проблемы? С другой стороны, Сделайте у Вас есть другая идея для обработки этой ошибки.

Спасибо,

PS. Главная причина для создания этого обработчика, потому что я хочу отобразить ошибку, когда приложение не может соединиться с другим сервисом как база данных для кэширования данных по приложению, запускается.

11
задан Soul_Master 9 March 2010 в 08:29
поделиться

1 ответ

Причина, по которой объекты Request и Response имеют значение null внутри вашего события Application_Error , потому что Application_Start событие не связано с каким-либо пользователем, поэтому вы не можете перенаправить с него. Доступны только встроенные объекты Приложение и Сервер . Обращение к объектам Session , Request или Response приведет к ошибке.

Один из способов обхода проблемы - использовать try / catch и в блоке catch записать ошибку и установить некоторую глобальную переменную, которая указывает, что что-то пошло не так во время запуска приложения. Позже Application_BeginRequest вы можете проверить эту переменную и соответствующим образом перенаправить.

19
ответ дан 3 December 2019 в 06:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: