Передача исключений на экран ошибок в ASP.net/C#
-
02-07-2019 - |
Вопрос
Исходя из фона рабочего стола, я не совсем понимаю, как передать перехваченные мной исключения на страницу ошибок, чтобы мои пользователи не видели стандартный экран исключений.
Мой общий вопрос: как передать исключение со страницы X на мою страницу ошибок в ASP.net?
Решение
Я предлагаю использовать раздел customErrors в файле web.config:
<customErrors mode="RemoteOnly" defaultRedirect="/error.html">
<error statusCode="403" redirect="/accessdenied.html" />
<error statusCode="404" redirect="/pagenotfound.html" />
</customErrors>
И затем используя ЭЛЬМА отправить электронное письмо и/или зарегистрировать ошибку.
Другие советы
Я использую шаблон: регистрирую ошибку в блоке try/catch (используя log4net), а затем делаю ответ.перенаправление на простую страницу с ошибкой.Это предполагает, что вам не нужно показывать какие-либо сведения об ошибке.
Если вам нужны сведения об исключении на отдельной странице, вы можете просмотреть Server.GetLastError.Я использую это в global.asax (в событии Application_Error) для регистрации необработанных исключений и перенаправления на страницу с ошибкой.
Нам удалось зафиксировать исключения в событии Global.asax Application_Error, сохранить их в сеансе и перенаправить на нашу страницу ошибок.Альтернативно вы можете закодировать сообщение об ошибке и передать его на страницу ошибки в строке запроса.
Вы также можете получить исключение из
Server.GetLastError();
Используйте пользовательские страницы ошибок в asp.net, вы можете найти их в customError раздел в файле web.config
Мы фиксируем исключение в файле Global.asax, сохраняем его в сеансе, затем пользователь перенаправляется на страницу ошибок, где мы фиксируем исключение для нашей переменной сеанса и показываем пользователю информацию о сообщении.
protected void Application_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
this.Session[CacheProvider.ToCacheKey(CacheKeys.LastError)] = ex;
}
Мы регистрируем сообщение об ошибке перед его отображением пользователю.
Я думаю, вы можете использовать global.asax -- Приложение_Исключение обработчик, чтобы перехватить исключение и затем сохранить его для отображения на странице ошибки.
Но на самом деле ваша страница ошибок не должна содержать код, который может вызвать еще одну ошибку.Это должно быть просто: «Ой!что-то пошло не так».
Если вам нужны подробности об ошибке, воспользуйтесь средством просмотра событий Windows или ЭЛЬМА или использовать какой-либо механизм регистрации.