2011-09-05 7 views
14

एएसपी.नेट में जब आप DEBUG मोड में हैं और कुछ विफल हो जाता है तो आपको मौत की प्रसिद्ध पीली स्क्रीन मिलती है।क्या मौत की पीले रंग की स्क्रीन पर कहीं भी कोई कार्यान्वयन है?

यह दिखाता है कि Server Error in <Location> Application था, विवरण, अपवाद विवरण, स्रोत फ़ाइल और स्टैक ट्रेस प्रदान करता है।

मैं कुछ अतिरिक्त जानकारी शामिल करने के लिए इस त्रुटि पृष्ठ को विस्तारित करना चाहता हूं।

  • क्या मृत्यु की पीले रंग की स्क्रीन का "ओपन सोर्स" कार्यान्वयन है?
  • क्या मृत्यु की अंतर्निहित पीले रंग की स्क्रीन का विस्तार करने का कोई तरीका है?

उत्तर

10

त्रुटि पृष्ठ स्वरूपण System.Web.ErrorFormatter और उसके उपवर्गों, जो दुर्भाग्य से आंतरिक हैं द्वारा किया जाता है। यदि आप HttpException.GetHtmlErrorMessage() का उपयोग करना पसंद करते हैं तो आप HTML को पकड़ सकते हैं और इसे संशोधित कर सकते हैं। लेकिन मैं ऐसा करने के इच्छुक हूं क्योंकि अन्य टिप्पणीकारों ने सुझाव दिया है और Server.GetLastError का उपयोग करें और इसे स्वयं प्रारूपित करें।

यदि ऐसा है तो - आप HtmlEncode त्रुटि संदेश उत्पादन XSS को कम करने और सुनिश्चित करें कि आपकी उत्पादन साइटों त्रुटि के बारे में किसी भी जानकारी को प्रदर्शित नहीं करते (के रूप में इस वर्ष 2010 में ASP.NET padding oracle डिक्रिप्शन हमले के लिए हमले वेक्टर था) के लिए सुनिश्चित करें।

+0

HttpException के साथ प्रस्तावित समाधान के साथ समस्या यह है कि HttpException को झुकाव करने का कोई तरीका नहीं है, आप केवल SqlException को रोक सकते हैं। .. –

+0

अपने 'एसक्यूएलएक्सप्शन' को 'इनर एक्सेप्शन' के रूप में पास करने और फिर 'GetHtmlErrorMessage()' को कॉल करने के लिए 'HttpException'' को 'नया' करने के बारे में कैसे करें। –

+0

ने कोशिश की कि ... फ़ॉर्मेटर सेट नहीं मिला ... केवल विकल्प DIY या http मॉड्यूल –

1

आप कस्टम त्रुटि पृष्ठों का उपयोग कर रहे हैं, तो मेरा मानना ​​है कि अगर कोई कस्टम पेज सारे हैं आप HttpContext.Current.Server.GetLastError(); के साथ पिछले त्रुटि मुझे यकीन है कि नहीं कर रहा हूँ मिल सकती है। लेकिन वाईएसओडी की सामग्री अनुरोध के संदर्भ से उपलब्ध होनी चाहिए।

4

इस पृष्ठ में आप जिस जानकारी को ढूंढ रहे हैं उसे लगता है।

http://www.asp.net/hosting/tutorials/processing-unhandled-exceptions-cs

अनिवार्य रूप से, एक अपवाद क्रम को अप करने के लिए बुलबुले जब यह एक System.Web.HttpException में लिपटे हो जाता है (यह गलत था। कम से कम मैं MVC 3 में इस व्यवहार को नहीं देखा था)।

मुझे लगता है कि आप उस वर्ग का विस्तार कर सकते हैं और GetHtmlErrorMessage को ओवरराइड कर सकते हैं जो भी आप चाहते हैं अतिरिक्त डेटा।

अद्यतन: ठीक है, थोड़ा प्रयोग के साथ ऐसा लगता है कि मैं गलत होगा। लेकिन एक कामकाज है ...

आप अपवाद से जानकारी को किसी भी तरीके से लिख सकते हैं, फिर त्रुटि को साफ़ करें और आप जो चाहते हैं वह आपके पास होगा।

इस तरह कुछ ...

protected void Application_Error(object sender, EventArgs e) 
{ 
    var context = HttpContext.Current; 
    var error = context.Server.GetLastError(); 
    context.Response.Write(error.Message); 
    context.Response.Write("<br /><br />"); 
    context.Response.Write(error.StackTrace); 
    context.Response.Write("<br /><br />"); 
    context.Response.Write("Hello World"); 
    context.Server.ClearError(); 
} 
+0

सिद्धांत में यह काम करता है, हालांकि एमवीसी 3 में जब यह एप्लिकेशन_इरर पर जाता है तो आपके पास एक एसक्यूएलएक्सप्शन होता है ... एक एचटीपीएक्सप्शन –

+0

आपके संपादन को पुनः नहीं देता है, हाँ ... मुझे वह दूर मिला है ...यह सिर्फ मेरे पास नहीं है और HttpException इसलिए पीले रंग की स्क्रीन के लिए एचटीएमएल प्रस्तुत नहीं कर सकता है जब तक कि मैं इसे –

+0

कोड नहीं भेजता और निकालने से आपको परेशानी बचाऊंगा। फिर एक अच्छा रेज़र टेम्पलेट सेट अप करें जो अपवाद प्रस्तुत करेगा और आप जो भी अतिरिक्त डेटा चाहते हैं उससे? –

0

हां वहाँ है।

यहाँ देखें:
http://www.oschina.net/code/explore/mono-2.8.1/mcs/class/System.Web/System.Web/HttpException.cs

यह मोनो (लिनक्स के लिए नेट) के स्रोत कोड से है संस्करणों < 2.10 (कि 2.8 कहने के लिए है) में। संस्करण 2.10+ में, उन्होंने टेम्पलेट का उपयोग करना शुरू किया, जो इसे ढूंढने और समझने में कहीं अधिक कठिन बनाता है।

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

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