2011-10-23 23 views
7

मैं एक अनुरोध start_request संभालता हूं। फिलहाल मैं asp.net को और भी करने से रोकने के लिए Response.End() का उपयोग करता हूं। Response.End() एक अपवाद फेंकता है क्या कोई अपवाद नहीं है जिससे मैं अनुरोध समाप्त कर सकता हूं?प्रतिक्रिया के लिए वैकल्पिक। एंड()?

यदि आपको आश्चर्य है कि मेरे पास कोई फ़ाइल क्यों नहीं है, तो मैं nginx को बताता हूं कि http प्रतिक्रिया शीर्षलेख के माध्यम से कौन सी फाइल सेवा करेगी, इस प्रकार मेरे पास asp.net में कुछ और करने के लिए कुछ नहीं है। Response.End एक अपवाद फेंकता है जिसे स्टैक जानकारी एकत्र करना है और वह सब कुछ। मुझे स्पष्ट रूप से इसकी आवश्यकता नहीं है और मेरे पिछले प्रश्नों से मुझे पता है कि फेंकने के अपवाद महंगे हैं। तो मैं कहां कर सकता हूं?

+0

को कोड निष्पादन बायपास करने के लिए अपवाद क्या है ? – Oded

+0

@ ओडेड डुनो लेकिन यह एमएसडीएन पर प्रलेखित है और वास्तव में कोई फर्क नहीं पड़ता –

+0

@ ओडेड: यह एक 'थ्रेडएबॉर्ट अपवाद' है। –

उत्तर

14

HttpResponse.End() डिज़ाइन द्वारा अपवाद फेंकता है; इसे काम करना है।

केवल तभी जब ThreadAbortException फेंक दिया जाता है, तो वह धागा प्रतिक्रिया प्रतिक्रिया को प्रस्तुत करता है। यदि कोई अपवाद नहीं है, तो प्रतिक्रिया समाप्त नहीं होती है।

इसके बजाय एक विकल्प HttpContext.Current.ApplicationInstance.CompleteRequest पर कॉल करना होगा। यह आगे बढ़कर Application_EndRequest ईवेंट पर कूदकर निष्पादन से आगे कोड को रोक देगा।

+0

का संभावित डुप्लिकेट हां तो मुझे अपवाद कैसे प्राप्त नहीं होता? मैंने संपादन से पहले आपका जवाब देखा और मुझे msdn में एक ओवरलोड नहीं देखा गया और न ही स्वतः पूर्ण http://msdn.microsoft.com/en-us/library/system.web.httpresponse.end%28v=VS.90%29.aspx –

+0

@ acidzombie24: आप सही हैं, इसलिए मैंने संपादित किया। अधिभार है कि विधि 'Response.Redirect() 'है, जो एक दूसरा बुलियन पैरामीटर लेता है जो कहता है कि क्या यह' Response.End()' आंतरिक रूप से या नहीं कहता है। लिंक के लिए –

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