Я знаю, что 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. Главная причина для создания этого обработчика, потому что я хочу отобразить ошибку, когда приложение не может соединиться с другим сервисом как база данных для кэширования данных по приложению, запускается.
Причина, по которой объекты Request
и Response
имеют значение null
внутри вашего события Application_Error
, потому что Application_Start
событие не связано с каким-либо пользователем, поэтому вы не можете перенаправить с него. Доступны только встроенные объекты Приложение
и Сервер
. Обращение к объектам Session
, Request
или Response
приведет к ошибке.
Один из способов обхода проблемы - использовать try / catch
и в блоке catch
записать ошибку и установить некоторую глобальную переменную, которая указывает, что что-то пошло не так во время запуска приложения. Позже Application_BeginRequest
вы можете проверить эту переменную и соответствующим образом перенаправить.