如何获取 <system.webServer><httpErrors>
中设置的 errorMode 属性的值? web.config 中的元素?
我正在尝试在 ASP.NET Web 应用程序中实现一些“ self 诊断”。当应用程序启动时,它会运行 web.config 中的一些设置并确认它们已正确设置。
虽然在 <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 库的情况下执行此操作。
有什么建议吗??
更新
好的,根据下面的建议,我尝试了这个:
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 设置,它将不起作用。
最佳答案
(CustomErrorsSection)HttpContext.Current.GetSection("system.webServer/httpErrors")
将不起作用,因为该部分来自 IIS7 配置 schema与 CustomErrorsSection(来自 ASP.NET 配置)不同。
如果您不想依赖 IIS7 程序集(您不应该这样做),唯一的方法是使用 ConfigurationSection对象通过其子元素枚举并获得你想要的。或者您可以直接获取配置文件,将其视为 XML 并读取必要的值。
关于c# - 以编程方式检查 httpErrors errorMode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3555225/