2009-04-05 14 views
11

फायरिंग नहीं कर रहा हूं, मैं अपने एमवीसी एप्लिकेशन में ग्लोबल एरर हैंडलिंग को लागू करने का प्रयास कर रहा हूं।एमवीसी ग्लोबल एरर हैंडलिंग: एप्लिकेशन_इरर

मेरे पास Application_Error के अंदर कुछ तर्क है जो ErrorController पर रीडायरेक्ट करता है लेकिन यह काम नहीं कर रहा है।

Global.aspx में मेरे Application_Error विधि के अंदर मेरे पास ब्रेक पॉइंट है।

जब मैं अपवाद को मजबूर करता हूं तो ब्रेक पॉइंट हिट नहीं किया जा रहा है। कोई विचार क्यों?

+0

क्या आपने गैर-डीबग मोड में एप्लिकेशन चलाने का प्रयास किया है? सीटीआर + एफ 5 –

+0

क्या आपकी विधि का सही हस्ताक्षर है? Application_Error (ऑब्जेक्ट प्रेषक, EventArgs ई) और Application_Error() नहीं? –

+0

आपके web.config में मौजूद है? –

उत्तर

10

आप परीक्षण के लिए इस तरीके का प्रयास कर सकते हैं:

protected void Application_Error(object sender, EventArgs e) 
{ 
    var error = Server.GetLastError(); 
    Server.ClearError(); 
    Response.ContentType = "text/plain"; 
    Response.Write(error ?? (object) "unknown"); 
    Response.End(); 
} 

Web.config

<customErrors mode="Off" /> 
+0

नहीं! एक गरीब विचार है। मैं त्रुटि को लॉग करने और उपयोगकर्ता को एक दोस्ताना स्क्रीन पेश करने के लिए वैश्विक त्रुटि प्रबंधन करना चाहता हूं। – Dan

+0

आपके लिंक मेरे प्रश्न के लिए वास्तव में प्रासंगिक नहीं हैं। – Dan

+2

@ डैन, आपको मेरा अंक नहीं मिला है। डीबगर बस आपके Application_Error विधि में कदम नहीं उठा सकता है। डीबगर के बिना मेरे कोड का प्रयोग करें और आप देखेंगे कि यह काम करता है। बीटीडब्ल्यू, आप की मदद करने के लिए किसी भी desier से हराया। –

0

मुझे यकीन है कि के लिए आपको बता नहीं सकता क्या' गलत है, लेकिन मैं जांच करने के लिए कुछ चीजों के बारे में सोच सकता हूं ... सबसे पहले, वीएस अपवाद पर तोड़ रहा है? यदि आप डीबगर में हैं तो यह डिफ़ॉल्ट है जो मुझे लगता है। यदि यह ब्रेकपॉइंट के साथ आपके कोड तक पहुंच जाता है तो यह केवल F5 दबाता है। साथ ही, क्या आप वाकई Application_Error पर पहुंचने से पहले अपवाद को संभाल नहीं सकते हैं?

वेब.कॉन्फिग में CustomErrors मोड की जांच करने के लिए एक और चीज, यह Off पर सेट है, है ना?

+0

द्वारा सुझाए गए अनुसार एप्लिकेशन_इरर में कदम उठा सकता है, इसे कहीं और संभाल नहीं लेता है, मुझे बस एक अपमानजनक मानक एएसपीनेट त्रुटि पृष्ठ मिल रहा है। – Dan

+0

ठीक है धन्यवाद, मेरी पोस्ट में एक और विचार जोड़ा। –

2

मुझे लगता है कि इसे संभालने का एक बेहतर तरीका आपके नियंत्रक (शायद आधार नियंत्रक) को सजाने के लिए HandleErrorAttribute का उपयोग करेगा। यह आपको इस विशेषता को विस्तारित करके और अपनी आवश्यकताओं को पूरा करने के लिए संशोधित करके विभिन्न त्रुटियों के साथ विभिन्न नियंत्रकों में त्रुटियों को लॉगिंग या संभाल करने का विकल्प देगा, जो प्रस्तुत किए गए दृश्य को बदलकर कहें। इस विशेषता का उपयोग एमवीसी में मानक फ़िल्टर प्रसंस्करण का उपयोग करता है और प्रतिक्रिया के लिए सीधे लिखने के बजाय पृष्ठ का उपयोग करता है जैसा कि आप Application_Error का उपयोग कर सकते हैं।

+2

हैंडलरर विशेषता का उपयोग करने से त्रुटियों में मदद नहीं मिलती है जो बाहरी नियंत्रकों के रूप में बता सकते हैं (उदाहरण के लिए GlobalRases में RegisterRoutes में)। –

+2

@ माइकल - सच है, यह केवल नियंत्रक या नियंत्रक विधि पर लागू होता है क्योंकि ढांचा केवल वहां विशेषताओं को पहचानता है। अभ्यास में मुझे यह समस्या नहीं है। मेरे लिए, एकमात्र कोड जो किसी कार्रवाई के बाहर चलता है, शुरू होने पर किया जाता है।मैं ईएलएमएएच का उपयोग कस्टम हैंडलरर एट्रिब्यूट के साथ करता हूं, इसलिए मेरे दोनों अड्डों को कवर किया जाता है। – tvanfosson

+0

@tvanfosson AJAX कॉल के लिए भी,। यह सीधे वैश्विक .asax application_error पर जाता है यदि आपके पास है ... कुछ शोध और परीक्षण के बाद, मैंने तीन prong समाधान पर निर्णय लिया है। ए कस्टम RegisterGlobalFilters का उपयोग कर विशेषता नियंत्रकों बी पर सी जावास्क्रिप्ट कि सभी संदेशों को कब्जा से निपटने कस्टम त्रुटि चालू करने के लिए web.config अपडेट कर रहा है, या तो मॉडल और एक सहायक विधि या ajax स्थिति कोड से प्रत्यक्ष का उपयोग कर सजाया नहीं और जावास्क्रिप्ट के माध्यम से त्रुटि पृष्ठ पर रीडायरेक्ट करें जिससे मॉडल और AJAX उनकी त्रुटि को फ़नल कर दें – Clarence

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