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à.
È sempre possibile utilizzare il riflesso ;-) – Steven
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? –