如何获取web.config中<system.webServer><httpErrors>
元素中设置的errorMode属性的值?
我正在尝试在ASP.NET Web应用程序中实现一些“自我诊断”。当应用程序启动时,它会运行web.config中的一些设置并确认它们已正确设置。
虽然在<system.web><customErrors>
元素中设置了errormode时此代码运行良好,但
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库。
有什么建议吗?
更新
好的,根据下面的建议,我尝试了这个:
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;
......但那只是讨厌!如果在machine.config或类似设置中设置了errorMode设置,它将无法工作。
答案 0 :(得分:0)
(CustomErrorsSection)HttpContext.Current.GetSection("system.webServer/httpErrors")
将无效,因为该部分来自IIS7配置schema,与CustomErrorsSection(来自ASP.NET配置)不同。
如果您不想依赖于IIS7程序集(您不应该这样做),那么只能使用ConfigurationSection对象通过其子元素进行枚举并获得您想要的。或者,您可以直接选择配置文件,将其视为XML并读取必要的值。