Как я использую Application_Error в ASP.NET MVC?

Я также рекомендовал бы Разработчику SQL Oracle, однако я нашел WinSQL быть довольно хорошим также. Разработчик SQL свободен, и WinSQL имеет версию сообщества, которая довольно устойчива, и работает хорошо против других платформ также (я также использую его для работы с Netezza).

17
задан Poku 23 September 2009 в 07:47
поделиться

2 ответа

Итак, во-первых, помните, что глобальная обработка ошибок должна быть крайней мерой, а классы контроллеров имеют специальный метод ошибок для ошибок;

protected virtual bool OnError(string actionName, 
    System.Reflection.MethodInfo methodInfo, Exception exception)

В рамках этого вы можете перенаправить на стандартный общий просмотр ошибок;

protected override bool OnError(string actionName, 
    System.Reflection.MethodInfo methodInfo, Exception exception)
{
   RenderView("Error", exception);
   return false;
}

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

protected void Application_Error(object sender, EventArgs e)
{
    Exception exception = Server.GetLastError();
    System.Diagnostics.Debug.WriteLine(exception);
    Response.Redirect("/Home/Error");
}

, но вам не нужно сделай это. Если вы установили страницу ошибок по умолчанию в web.config, тогда вам не нужно это перенаправление

<customErrors defaultRedirect="Home/Error" />

Однако, если вы не добавили представление ошибок в свой домашний контроллер, которого не существует, поэтому добавьте следующее в домашний контроллер

public ActionResult Error()
{
    return View();
}

Затем (если вы разумны) вы должны поместить код обработки ошибок в метод Error (), так как именно там будут обнаруживаться все необработанные ошибки.

public ActionResult Error()
{
    Exception exception = Server.GetLastError();
    System.Diagnostics.Debug.WriteLine(exception);
    return View();
}

И, наконец, помните, что по умолчанию вы не видите пользовательских ошибок, если подключаетесь к localhost! Поэтому вам нужно изменить это поведение

<customErrors mode="On" defaultRedirect="/Home/Error" />
17
ответ дан 30 November 2019 в 14:00
поделиться
  • У вас изначально настроена сессия ? Если ошибка запускается из IHttpHandler , не отмеченного IRequiresSessionState , то доступ к Session завершится неудачно.
  • Что вы делаете с Session [ «Тест»] ? Вы уверены, что ваш код действительно не работает? Вы можете попробовать File.Open и просто вывести некоторый текст (например, текущее время) в C: \ my-log.txt , что немного более вероятно, чем использование Session ].
  • GetBaseException бесполезен в этом случае (и вообще для ведения журнала), насколько я могу судить.
  • Сообщение имеет тип строка - вызов .ToString () не требуется. В общем, я d настоятельно рекомендую избегать ToString () , где это возможно - если вы используете его, потому что не уверены в типе объекта, это должно быть красным флажком; выполнение конечного обхода системы типов может скрыть незаметные ошибки (например, DBNull.Value.ToString () == "" ). Для графического интерфейса пользователя встроенные типы предоставляют перегрузку .ToString (IFormatProvider) , которая зависит от языка и региональных параметров и позволяет избежать проблем с переносимостью. Поскольку эта перегрузка также отсутствует в объекте , она также позволяет избежать очень слабо типизированных вызовов .ToString .
1
ответ дан 30 November 2019 в 14:00
поделиться
Другие вопросы по тегам:

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