【发布时间】:2010-08-24 09:43:47
【问题描述】:
如何获取 web.config 中 <system.webServer><httpErrors> 元素中设置的 errorMode 属性的值?
我正在尝试在 ASP.NET Web 应用程序中实现一些“自我诊断”。当应用程序启动时,它会运行 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 设置,则它不会起作用。
【问题讨论】:
标签: c# asp.net iis-7 web-config