2010-08-24 18 views
8

Come si ottiene il valore della proprietà errorMode impostato nell'elemento <system.webServer><httpErrors> in web.config?Controllare httpErrors errorMode a livello di codice

Sto cercando di implementare alcuni "autodiagnosi" in un'applicazione Web ASP.NET. Quando l'app si avvia, esegue alcune delle impostazioni in web.config e conferma che sono impostate correttamente.

Anche se questo codice funziona abbastanza bene quando l'ErrorMode è impostato nell'elemento <system.web><customErrors>,

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

non funzionerà una volta che il sito viene distribuito su IIS7 e questa impostazione si trova ora nella system.webServer -> httpErrors.

Questo non funziona:

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

e colata a un CustomErrorsSection sembra anche come una cattiva idea, ci deve essere un tipo di meglio da usare?

Ho trovato questo articolo su IIS.NET, HTTP Errors, ma spero di farlo senza la dipendenza dalla libreria Microsoft.Web.Administration.

Qualche suggerimento ??

UPDATE

Ok, sulla base del seguente suggerimento, ho provato questo:

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

Ma questo non funziona neanche, l'oggetto errSec è nullo. E su una nota a margine, se carico la sezione <system.web><customErrors> utilizzando lo stesso approccio, la chiamata al metodo GetRawXml() non riesce con "Questa operazione non si applica in fase di esecuzione". messaggio di eccezione.

So come caricare l'intero web.config come file xml e interrogarlo per ottenere l'elemento di cui ho bisogno. Ma mi sembra che debba esserci un approccio più elegante.

Come leggere web.config come xml:

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

... ma questo è solo brutto! E se l'impostazione errorMode è impostata su machine.config o simile, non funzionerà.

risposta

0

(CustomErrorsSection)HttpContext.Current.GetSection("system.webServer/httpErrors") non funzionerà perché quella sezione dista configurazione IIS7 schema e non stessa CustomErrorsSection (dalla configurazione ASP.NET). Se non si vuole dipendere dall'assembly IIS7 (che non si dovrebbe), l'unico modo è usare l'oggetto ConfigurationSection per enumerare tramite i suoi elementi figli e ottenere il volere desiderato. Oppure puoi prendere direttamente il file di configurazione, trattarlo come un XML e leggere i valori necessari.

+0

È sempre possibile utilizzare il riflesso ;-) – Steven

+0

Sì, ho dimenticato di menzionare l'approccio "leggi come xml" come un'altra opzione che vorrei evitare. :) Stavo cercando di caricarlo come ConfigurationSection, ma non riuscivo a capire come arrivare alla proprietà errorMode. Qualche idea? –

Problemi correlati