Проверить httpErrors errorMode программным путем

Как получить значение свойства errorMode, установленного в элементе в web.config?

Я пытаюсь реализовать некоторую «самодиагностику» в веб-приложении ASP.NET. Когда приложение запускается, оно запускает некоторые параметры в web.config и подтверждает, что они установлены правильно.

Хотя этот код работает довольно хорошо, когда режим ошибки установлен в Элемент ,

var errSec = (CustomErrorsSection)HttpContext.Current.GetSection("system.web/customErrors");
Response.Write(errSec.Mode.ToString());

не будет работать после развертывания сайта на IIS7, и теперь этот параметр находится в system.webServer -> httpErrors .

Это не сработает:

var errSec = (CustomErrorsSection)HttpContext.Current.GetSection("system.webServer/httpErrors");

И приведение к CustomErrorsSection также кажется плохой идеей, должен быть лучший тип для использования?

Я нашел эту статью в IIS.NET, Ошибки HTTP , но я надеюсь сделать это без зависимости от библиотеки Microsoft.Web.Administration.

Любые предложения?

ОБНОВЛЕНИЕ

Хорошо, основываясь на предложении ниже, я попробовал это:

var errSec = (ConfigurationSection)HttpContext.Current.GetSection("system.webServer/httpErrors");
Response.Write(errSec.SectionInformation.GetRawXml().ToString());

Но это тоже не работает, объект errSec является нулевым. Кроме того, если я загружаю раздел , используя тот же подход, вызов метода GetRawXml () завершается с ошибкой «Эта операция делает не применяется во время выполнения. " сообщение об исключении.

Я знаю, как загрузить весь файл web.config в виде XML-файла и запросить его, чтобы получить элемент, который мне нужен. Но мне просто кажется, что должен быть более элегантный подход.

Как читать web.config как xml:

var conf = XDocument.Load(System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath + "web.config");
var errMode = conf.Root.Element("system.webServer").Element("httpErrors").Attribute("errorMode").Value;

... но это просто противно! И если параметр errorMode установлен в machine.config или аналогичном, он не будет работать.

9
задан Cœur 10 August 2017 в 11:10
поделиться

1 ответ

(CustomErrorsSection) HttpContext.Current.GetSection ("system.webServer / httpErrors") не будет работать, потому что этот раздел взят из схемы конфигурации IIS7 , а не такой же как CustomErrorsSection (из конфигурации ASP.NET). Если вы не хотите зависеть от сборки IIS7 (чего не следует), единственный способ - использовать объект ConfigurationSection для перечисления через его дочерние элементы и получения желаемого. Или вы можете напрямую выбрать файл конфигурации, обработать его как XML и прочитать необходимые значения.

1
ответ дан 5 December 2019 в 02:27
поделиться
Другие вопросы по тегам:

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