2009-12-10 18 views
5

में अच्छा दिन, हर कोई।एएसपी.नेट व्हाइटसाइट या यूआरएल

मुझे एएसपी.नेट इंजन के भीतर अजीब व्यवहार मिला जब यह व्हाइटस्पेस के साथ मौजूद गैर-मौजूद यूआरएल को संभालता है।

हम this एक की तरह सामान्य URL होने पर: https://stackoverflow.com/questions/tagged/ग% 23

के रूप में (यदि हो तो) डेवलपर्स द्वारा इरादा था हम सामान्य कस्टम 404 पृष्ठ मिलता है।

लेकिन यहां बग है। बस कुछ सफेद जगह जैसे this: https://stackoverflow.com/questions/tagged/c% 23

और आपको बुरा एएसपी.NET 404 त्रुटि पृष्ठ दिखाई देगा। चाहे ऐसा पृष्ठ कभी प्रदर्शित किया जाना चाहिए, एक और कहानी है। मैंने पहले ही कुछ भारी googling बना दिया है, डिबगिंग शोध किया है, और मैं कह सकता हूं कि इस स्थिति में सभी कस्टम हैंडलर को नजरअंदाज कर दिया जाता है, वैश्विक अनुप्रयोग वर्ग (Application_Errorglobal.asax में) अभी तक नहीं पहुंचे हैं। असल में, मुझे नहीं दिख रहा है यह स्थिति ASP.NET द्वारा कैसे प्रबंधित की जा सकती है। कोई विचार?

बस एक नोट के रूप में, यह व्यवहार एएसपी.नेट और एएसपी.नेट एमवीसी से संबंधित है (जैसा कि StackOverflow.com उदाहरण पर दिखाया गया है)। मैंने अन्य साइटों की कोशिश की और पाया कि माइक्रोसॉफ्ट.com भी इस श्रेणी में आता है (this देखें: http://www.microsoft.com/en/us%20/default.aspx)। इसके अलावा, हम बिना किसी बेहतर परिणाम के साथ% 20 अनुक्रम के साथ व्हाइटस्पेस को प्रतिस्थापित कर सकते हैं।

उत्तर

2

वर्कअराउंड पाया जाता है।

HttpException'पेजनाम.एएसपीएक्स' संदेश के लिए बाल अनुरोध निष्पादित करने में त्रुटि के साथ फेंक दिया गया है।

सबसे पहले, एएसपी.नेट अनुरोधित पृष्ठ या मार्ग नहीं ढूंढ सकता है। फिर अपवाद System.Web.CachedPathData.GetVirtualPathData (वास्तव में, System.Web.CachedPathData.GetConfigPathData से) से हटा दिया गया है, लेकिन GetVirtualPathData चीजों को स्पष्ट करता है)।

फिर यदि हमारे पास कोई त्रुटि हैंडलर है, तो यह कुछ क्रियाएं प्रदान करता है और कुछ करने का प्रयास करता है। यहां हमारे पास आमतौर पर Server.Transfer या Request.Redirect है जो उपयोगकर्ता को 404 या अधिक सामान्य त्रुटि पृष्ठ पर ले जाता है। परंतु। वर्तमान स्थिति में HttpException को फेंक दिया जाता है और हमें ASP.NET त्रुटि पृष्ठ मिलता है। और इस स्थिति में Server.ClearError और Server.RewritePath सहायता कर सकते हैं: अपवाद इस तरह से नहीं फेंक दिया जाता है। लेकिन! इस तरह की त्रुटि हैंडलिंग हमारे आवेदन द्वारा फेंक दिया सामान्य व्यापार तर्क अपवादों को दुर्घटनाग्रस्त करता है।

और नई परेशानी को हल करने के लिए हमें इसका उपयोग करना होगा कि क्या हमें HttpException प्राप्त होता है (इसलिए हम ClearRrrite के साथ ServerRewrite का उपयोग करते हैं) या हमारे स्वयं के कोड से कुछ अपवाद। लेकिन फिर, यह अच्छा है कि आप अपनी अपवाद कक्षाएं प्रदान करते हैं, लेकिन यदि नहीं ...

वैसे भी, मैं इसे एक बहुत ही अजीब मामला मानता हूं, विशेष रूप से Application_Error हैंडलर को अनदेखा किया जाता है जबकि अन्य एप्लिकेशन कोड अभी भी निष्पादित किया जाता है।

संपादित

के रूप में कोड तरह से सबसे अच्छा चयन नहीं था (हम केवल अनुमान लगा सकते हैं तो हम इस त्रुटि जब अपवाद संदेश खाली है और InnerException null है कि) बेहतर समाधान की तरह शासन के साथ ISAPI rewriter के भीतर निहित है कस्टम 404 पेज पर (\s+(\.aspx).*)|(\s+/)। यहां हम /somePage .aspx और /somePath / जैसे सभी अनुरोधों को पकड़ते हैं। जब हमारे पास whitespace नहीं है .aspx या slash लेकिन पृष्ठ के नाम या पथ भाग के भीतर हमने समस्या का उल्लेख नहीं किया है।

0

क्या यह अनुरोध नहीं है कि अनुरोध कभी भी एएसपीनेट पाइपलाइन तक नहीं पहुंचता है। यदि आप आईआईएस में त्रुटि दस्तावेज सेट अप करते हैं, तो क्या उन्हें "बुरा पेज" के बजाय प्रदर्शित नहीं किया जाएगा?

+0

मैं इस तरह से कोशिश करूंगा, लेकिन अजीब बात यह है कि: हमारे आवेदन से कुछ त्रुटि हैंडलर निष्पादित किया जाता है और दिन को बचाने की कोशिश करता है, लेकिन Application_Error को अनदेखा किया जाता है। क्या यह अजीब नहीं है? :) – terR0Q

+0

कोशिश की, मदद नहीं करता है। मैंने वेब साइट के लिए सभी प्रकार की त्रुटि 404 त्रुटियों के लिए लक्षित यूआरएल सेट किया है, और एएसपी.नेट अभी भी अपना संदेश देता है। साथ ही, web.config में customErrors का उपयोग नहीं करता है। – terR0Q

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