以编程方式检查httpErrors errorMode

时间:2010-08-24 09:43:48

标签: c# asp.net iis-7 web-config

如何获取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设置,它将无法工作。

1 个答案:

答案 0 :(得分:0)

(CustomErrorsSection)HttpContext.Current.GetSection("system.webServer/httpErrors")将无效,因为该部分来自IIS7配置schema,与CustomErrorsSection(来自ASP.NET配置)不同。 如果您不想依赖于IIS7程序集(您不应该这样做),那么只能使用ConfigurationSection对象通过其子元素进行枚举并获得您想要的。或者,您可以直接选择配置文件,将其视为XML并读取必要的值。