Подтвердить что ты не робот

Есть ли способ проверить, программно, если для приложения ASP.NET CustomErrors установлено значение "Выкл."?

Обычно мы вылавливаем необработанные исключения в Global.asax, а затем перенаправляем на хорошую страницу с дружественной ошибкой. Это нормально для среды Live, но в нашей среде разработки мы хотели бы проверить, отключены ли опции CustomErrors, и если да, просто выбросьте уродливую ошибку.

Есть ли простой способ проверить, не отключены ли опции CustomErrors через код?

4b9b3361

Ответ 1

Да, через WebConfigurationManager:

System.Configuration.Configuration configuration =
    System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("/");

System.Web.Configuration.CustomErrorsSection section =
    (CustomErrorsSection)configuration.GetSection("system.web/customErrors");

После того, как у вас есть раздел, вы можете проверить, включен или выключен режим следующим образом:

CustomErrorsMode mode = section.Mode;
if (mode == CustomErrorsMode.Off)
{
    // Do something
}

Ответ 2

Я бы предложил использовать следующее свойство:

HttpContext.Current.IsCustomErrorEnabled

Как упоминалось здесь, IsCustomErrorEnabled учитывает больше таких вещей, как RemoteOnly:

Свойство IsCustomErrorEnabled объединяет три значения, чтобы сказать вам включены ли настраиваемые ошибки для конкретного запроса. Это не так же просто, как чтение файла web.config, чтобы проверить раздел. Там немного больше за кулисами, чтобы по-настоящему определить, включены ли настраиваемые ошибки.

Свойство просматривает эти три значения:

  • Web.config < развертывание > . Это полезное свойство для установки при развертывании приложения на производство сервер. Это отменяет любые другие настройки для пользовательских ошибок.

  • Web.config <customErrors> свойство режима раздела. Этот параметр указывает, включены ли пользовательские ошибки вообще, и если да, то они разрешены только для удаленных запросов.

  • Свойство IsLocal объекта HttpRequest. Если пользовательские ошибки включены только для удаленных запросов, вам нужно знать, является ли запрос удаленным компьютер.

Ответ 3

Это должно сделать трюк...

using System.Web.Configuration;
using System.Configuration;

// pass application virtual directory name
Configuration configuration = WebConfigurationManager.OpenWebConfiguration("/TestWebsite");
CustomErrorsSection section = (CustomErrorsSection)configuration.GetSection("system.web/customErrors");
CustomErrorsMode mode=section.Mode;