【问题标题】:Check httpErrors errorMode programmatically以编程方式检查 httpErrors errorMode
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 你总是可以使用反射 ;-)
    • 是的,我忘了提到“读取为 xml”的方法是我想避免的另一个选项。 :) 我试图将它作为 ConfigurationSection 加载,但我不知道如何访问 errorMode 属性。有什么想法吗?
    • 如何不爱 ASP!做这么简单的事情的 10 种方法 - 其中 9 种是错误的 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 2012-06-09
    • 2011-12-06
    • 1970-01-01
    相关资源
    最近更新 更多