2010-08-24 13 views
8

¿Cómo obtengo el valor de la propiedad errorMode establecida en el elemento <system.webServer><httpErrors> en web.config?Compruebe httpErrors errorMode programmatically

Estoy tratando de implementar algunos "autodiagnósticos" en una aplicación web ASP.NET. Cuando se inicia la aplicación, se ejecuta a través de algunas de las configuraciones en web.config y confirma que están configuradas correctamente.

Si bien este código funciona bastante bien cuando el ErrorMode se establece en el elemento <system.web><customErrors>,

var errSec = (CustomErrorsSection)HttpContext.Current.GetSection("system.web/customErrors"); 
Response.Write(errSec.Mode.ToString()); 

no va a funcionar una vez que el sitio se implementa en IIS7 y esta configuración se encuentra ahora en system.webServer -> httpErrors.

Esto no funcionará:

var errSec = (CustomErrorsSection)HttpContext.Current.GetSection("system.webServer/httpErrors"); 

y la colada a un CustomErrorsSection también parece una mala idea, tiene que haber un mejor tipo de uso?

Encontré este artículo en IIS.NET, HTTP Errors, pero espero hacerlo sin la dependencia de la biblioteca Microsoft.Web.Administration.

¿Alguna sugerencia?

ACTUALIZACIÓN

acuerdo, basado en la sugerencia a continuación, he intentado esto:

var errSec = (ConfigurationSection)HttpContext.Current.GetSection("system.webServer/httpErrors"); 
Response.Write(errSec.SectionInformation.GetRawXml().ToString()); 

Pero eso no funciona bien, el objeto errSec es nulo. Y en una nota lateral, si cargo la sección <system.web><customErrors> utilizando el mismo enfoque, la llamada al método GetRawXml() falla con un "Esta operación no se aplica en tiempo de ejecución". mensaje de excepción.

Sé cómo cargar todo el web.config como un archivo xml y consultar eso para llegar al elemento que necesito. Pero me parece que debe haber un enfoque más elegante.

Cómo leer web.config como xml:

var conf = XDocument.Load(System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath + "web.config"); 
var errMode = conf.Root.Element("system.webServer").Element("httpErrors").Attribute("errorMode").Value; 

... pero eso es sólo desagradable! Y si la configuración de ErrorMode está establecida en machine.config o similar, no funcionará.

Respuesta

0

(CustomErrorsSection)HttpContext.Current.GetSection("system.webServer/httpErrors") no funcionará porque esa sección es de la configuración de IIS7 schema y no es igual a CustomErrorsSection (de la configuración de ASP.NET). Si no desea tomar la dependencia del ensamblado IIS7 (que no debería), la única forma es usar el objeto ConfigurationSection para enumerar a través de sus elementos secundarios y obtener la opción que desee. O puede recoger directamente el archivo de configuración, tratarlo como un XML y leer los valores necesarios.

+0

Siempre puedes usar el reflejo ;-) – Steven

+0

Sí, olvidé mencionar el enfoque "leer como xml" como otra opción que me gustaría evitar. :) Intenté cargarlo como una sección de configuración, pero no pude encontrar la forma de acceder a la propiedad errorMode. ¿Algunas ideas? –