2010-08-24 10 views
8

Jak uzyskać wartość właściwości errorMode zestaw w <system.webServer><httpErrors> elementu w web.config?Sprawdź httpErrors errorMode programowo

Próbuję zaimplementować pewną "autodiagnostykę" w aplikacji sieci web ASP.NET. Po uruchomieniu aplikacji uruchamia niektóre ustawienia w pliku web.config i potwierdza, że ​​są ustawione poprawnie.

Podczas gdy ten kod działa całkiem przyjemnie, gdy errormode jest ustawiony w elemencie <system.web><customErrors>,

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

to nie będzie działać, gdy strona jest rozmieszczony na IIS7 i ustawienie to jest teraz znaleźć w system.webServer -> httpErrors.

To nie zadziała:

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

i oddające do CustomErrorsSection również wydaje się złym pomysłem, tam musi być lepszy rodzaj użyciu?

Znalazłem ten artykuł na temat IIS.NET, HTTP Errors, ale mam nadzieję, że zrobię to bez zależności od biblioteki Microsoft.Web.Administration.

Jakieś sugestie?

UPDATE

Dobra, na podstawie poniższej sugestią, próbowałem to:

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

Ale to nie działa albo, obiekt errSec jest null. I na marginesie, jeśli załaduję sekcję <system.web><customErrors> przy użyciu tego samego podejścia, wywołanie metody GetRawXml() kończy się niepowodzeniem z "Ta operacja nie ma zastosowania w czasie wykonywania." komunikat wyjątku.

Wiem, jak załadować cały plik web.config jako plik xml i zapytać, aby dostać się do elementu, którego potrzebuję. Ale wydaje mi się, że musi być bardziej eleganckie podejście.

Jak czytać web.config jak xml:

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

... ale to jest po prostu brzydki! A jeśli ustawienie errorMode jest ustawione w pliku machine.config lub podobnym, nie będzie działać.

Odpowiedz

0

(CustomErrorsSection)HttpContext.Current.GetSection("system.webServer/httpErrors") nie będzie działać, ponieważ sekcja ta jest z konfiguracji IIS7 schema i nie jest taka sama jak CustomErrorsSection (z konfiguracji ASP.NET). Jeśli nie chcesz brać zależności od zestawu IIS7 (którego nie powinieneś), jedynym sposobem jest użycie obiektu ConfigurationSection do wyliczenia za pomocą elementów podrzędnych i uzyskania pożądanego efektu. Możesz też bezpośrednio pobrać plik konfiguracyjny, potraktować go jako plik XML i odczytać niezbędne wartości.

+0

Zawsze możesz użyć odbicia ;-) – Steven

+0

Tak, zapomniałem wspomnieć o podejściu "czytaj jako xml" jako innej opcji, której chciałbym uniknąć. :) Próbowałem załadować go jako ConfigurationSection, ale nie mogłem dowiedzieć się, jak dostać się do właściwości errorMode. Jakieś pomysły? –

Powiązane problemy