如何获取web.config中<system.webServer><httpErrors>
元素中设置的errorMode属性的值?以编程方式检查httpErrors errorMode
我试图在ASP.NET Web应用程序中实现一些“自我诊断”。当应用程序启动时,它将运行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
对象为null。另外,如果我使用相同的方法加载<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中设置或类似,它将不起作用。
您可以随时使用反射;-) – Steven 2010-08-24 10:30:56
是的,我忘了提及“read as xml”方法作为我想避免的另一个选项。 :)我试图加载它作为ConfigurationSection,但我无法弄清楚如何到达errorMode属性。有任何想法吗? – 2010-08-24 11:04:27