2010-08-24 13 views
8

मुझे त्रुटि का मान कैसे प्राप्त करें मैड प्रॉपर्टी <system.webServer><httpErrors> तत्व में web.config में सेट करें?httpErrors त्रुटि मोड प्रोग्रामेटिक रूप से

मैं एएसपी.नेट वेब एप्लिकेशन में कुछ "आत्म-निदान" को लागू करने की कोशिश कर रहा हूं। जब ऐप शुरू होता है, तो यह web.config में कुछ सेटिंग्स के माध्यम से चलता है और पुष्टि करता है कि वे सही तरीके से सेट हैं।

इस कोड को काफी अच्छी तरह से काम करता है जब ErrorMode <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 पर मिला, लेकिन मुझे माइक्रोसॉफ्ट.एब.एडमिनिस्ट्रेशन लाइब्रेरी पर निर्भरता के बिना ऐसा करने की उम्मीद है।

कोई सुझाव ??

अद्यतन

ठीक है, नीचे दिए गए सुझाव के आधार पर, मैं इस कोशिश की:

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 को पढ़ने के लिए:

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 या इसी तरह से सेट है, तो यह काम नहीं करेगा।

उत्तर

0

(CustomErrorsSection)HttpContext.Current.GetSection("system.webServer/httpErrors") काम नहीं करेगा क्योंकि वह अनुभाग आईआईएस 7 कॉन्फ़िगरेशन schema से है और कस्टमइरर्ससेक्शन (एएसपी.नेट कॉन्फ़िगरेशन से) के समान नहीं है। यदि आप आईआईएस 7 असेंबली (जो आपको नहीं करना चाहिए) पर निर्भरता नहीं लेना चाहते हैं, तो केवल ConfigurationSection ऑब्जेक्ट का उपयोग अपने बच्चों के तत्वों के माध्यम से गिनने के लिए करना है और चाहते हैं कि आप चाहते हैं। या आप सीधे कॉन्फ़िगरेशन फ़ाइल ले सकते हैं, इसे एक्सएमएल के रूप में मान सकते हैं और आवश्यक मानों को पढ़ सकते हैं।

+0

आप हमेशा प्रतिबिंब का उपयोग कर सकते हैं ;-) – Steven

+0

हाँ, मैं "एक्सएमएल के रूप में पढ़ना" दृष्टिकोण का उल्लेख करना भूल गया क्योंकि एक और विकल्प जिसे मैं टालना चाहता हूं। :) मैं इसे कॉन्फ़िगरेशनसेक्शन के रूप में लोड करने का प्रयास कर रहा था, लेकिन मुझे यह पता नहीं लगा सका कि त्रुटि कैसे प्राप्त करें। कोई विचार? –

संबंधित मुद्दे