ASP.net MVC [HandleError], не ловя исключения

Вам нужно нажать на стрелки в правом верхнем углу или нажать «Shift + Enter»

39
задан Jon Seigel 9 May 2010 в 20:36
поделиться

4 ответа

В Web.config, изменение customErrors:

<system.web>
  <customErrors mode="On">
  </customErrors>

, Если режим будет или Выключен или RemoteOnly, то Вы будете видеть желтый экран смерти вместо пользовательской ошибочной страницы. Обоснование состоит в том, что разработчики обычно хотят более подробную информацию о желтом экране смерти.

67
ответ дан Craig Stuntz 27 November 2019 в 02:11
поделиться

Важно: Будьте осторожны, чтобы на самой странице с ошибкой не было ошибки!

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

Также в отношении включения или выключения 'customErrors' существует несколько факторов, влияющих на то, является ли дружественная страница ошибок (ваш Errors.aspx) страница будет отображаться или нет.

См. этот блог (кроме нижеприведенного)

HttpContext.IsCustomErrorEnabled - просматривает три разных источника

  1. Розничное свойство раздела в web.config. Это полезное свойство для установки при развертывании ваше приложение к производству сервер. Это отменяет любые другие настройки для пользовательских ошибок.
  2. Свойство режима раздела в web.config. Эта настройка указывает, являются ли пользовательские ошибки включены вообще, и если да, то ли они включены только для удаленных запросов.
  3. Свойство IsLocal объекта HttpRequest. Если пользовательские ошибки включены только для удаленных запросов, вам нужно знать, исходит ли запрос от удаленный компьютер.

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

Эта статья MSDN обсуждает атрибут дополнительно.

16
ответ дан 27 November 2019 в 02:11
поделиться

Другой причиной этой проблемы может быть

В приложении Template MVC (сгенерированном VS2008 / VS2008 Express) Error.aspx (сгенерированный VS) использует главную страницу.

Если главная страница обращается к любому ViewData, она выдаст исключение с нулевой ссылкой, тогда error.aspx не будет отображаться.

Используйте этот простой код как свой Error.aspx, он решит проблему (вместе с CustomErrors = On)

<%@ Page Language="C#"  Inherits="System.Web.Mvc.ViewPage<System.Web.Mvc.HandleErrorInfo>" %>
<%= Model.Exception.Message %>
13
ответ дан 27 November 2019 в 02:11
поделиться

Я тоже боролся с этим, и теперь я думаю, что понимаю проблему.

Вкратце, требования к [HandleError] работают должным образом:

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

Пример:

<customErrors mode="On" defaultRedirect="Error" />

Отсутствие части defaultRedirect = "Error" вместо этого приведет к ошибке 500 в браузере - НЕ на странице ошибок ASP.NET (YSOD).

Также вам не обязательно находиться в режиме Release. Я тестировал это с помощью сборки отладки, и она отлично работала.

Моей средой была Visual Studio 2010 с использованием .NET 4 и стандартного шаблона проекта «Веб-приложение ASP.NET MVC 2».

Что меня смутило, так это документация MSDN для класса HandleErrorAttribute. В нем прямо не говорится, что вы должны включать настраиваемые ошибки в web.config . И я решил, что все, что мне нужно, это атрибут [Handle Error] .

8
ответ дан 27 November 2019 в 02:11
поделиться
Другие вопросы по тегам:

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