2011-02-11 14 views
18

मैं सोच रहा था कि पृष्ठ के अंदर से 404 त्रुटि फेंकना संभव है (कोड पीछे)? या संभवतः 408 (टाइमआउट) या 401 (प्रमाणीकरण आवश्यक) जैसे किसी अन्य प्रकार के त्रुटि पृष्ठ को भी फेंक दें?एएसपी.Net पृष्ठ के भीतर 404 त्रुटि फेंकना संभव है?

नोट: मैं सिर्फ पृष्ठ को 404 का स्टेटस कोड वापस नहीं करना चाहता, मैं इसे एएसपी.Net (या मेरे कस्टमरर्स) 404 त्रुटि पृष्ठ का उपयोग करना चाहता हूं। पीछे कोड में

कुछ इस तरह:

if(id>10){ //if id is greater than 10, then it doesn't exist here 
    throw 404Error(); 
} 

उत्तर

29

आप एक HttpException फेंक और इसी स्थिति कोड सेट कर सकते हैं:

throw new HttpException(404, "Not found"); 

यह भी अन्य स्थिति कोड के साथ काम करेंगे। 401 के बारे में सिर्फ एक टिप्पणी: जैसा कि आप शायद जानते हैं कि एएसपी.नेट एमवीसी इस कोड का पता लगाता है, यह स्वचालित रूप से आपको लॉगिन पेज पर रीडायरेक्ट करता है और 401 स्टेटस कोड के लिए कस्टम त्रुटि पृष्ठ प्राप्त करने के लिए एक वास्तविक पिटा हो सकता है।

+0

हम्म में कस्टम त्रुटि पृष्ठों का उपयोग फेंकने के लिए कोई जरूरत नहीं है। यदि कस्टम अपरर्स बंद होने पर यह अपवाद फेंक दिया गया था, तो क्या यह मानक ASP.Net अपवाद पृष्ठ को स्टैकट्रैक के साथ दिखाएगा? – Earlz

+2

@Earlz, अगर 'customErrors =" off "' आपको शायद एक वाईएसओडी मिलेगा। –

+0

मैं विकास वातावरण में कब उत्सुक था। ऐसा लगता है कि हालांकि काम करता है! – Earlz

17

एक बहुत बेहतर तरीका है:

'Throws a 404 Not found: 
Response.Clear() 
Response.StatusCode = 404 
Response.End() 

एक अपवाद है और इसके बाद के संस्करण काम करता है ज्यादा बेहतर जब web.config

+1

आप सिस्टम.Net.HttpStatusCode में भी enums का उपयोग कर सकते हैं। –

+2

'Response.End()' से बचा जाना चाहिए क्योंकि यह क्लासिक एएसपी से कैर-ओवर है। यह एक 'थ्रेडएबॉर्ट अपवाद' उठाता है जो भारी लोड वातावरण में अच्छा नहीं खेलता है। इसके बजाय 'HttpContext.Current.AplicationInstance.CompleteRequest' को कॉल करें और यदि आवश्यक हो, तो एक त्रुटि संदेश लिखने के बाद' Response.SuppressContent = true' सेट करें। – Dai

+0

यह उत्तर विशेष रूप से सहायक है क्योंकि साफ़() और अंत() कॉल सहित कोड खंड को संदर्भ में रखता है। –

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