2010-08-24 2 views
8

Как получить значение свойства errorMode, установленного в элементе <system.webServer><httpErrors> в файле web.config?Проверить httpErrors errorMode программно

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

Хотя этот код работает довольно хорошо, когда ErrorMode установлен в <system.web><customErrors> элемент,

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 Errors, но я надеюсь сделать это без зависимости от библиотеки Microsoft.Web.Administration.

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

UPDATE

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

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

Но это не работает, либо, то errSec объект является нулевым. И в примечании, если я загружаю раздел <system.web><customErrors>, используя тот же подход, вызов метода 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 или аналогичный, он не будет работать.

ответ

0

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

+0

Вы всегда можете использовать отражение ;-) – Steven

+0

Да, я забыл упомянуть подход «читать как xml» как еще один вариант, которого я бы хотел избежать. :) Я пытался загрузить его как ConfigurationSection, но я не мог понять, как добраться до свойства errorMode. Есть идеи? –

Смежные вопросы