2010-12-21 16 views
63

मेरे पास एक एएसपी.Net एकल-फ़ाइल वेब सेवा है (.ashx फ़ाइल जिसमें IHttpHandler कार्यान्वयन है) जिसे 500 आंतरिक सर्वर त्रुटि स्थिति कोड के साथ प्रतिक्रियाओं के रूप में त्रुटियों को वापस करने में सक्षम होना आवश्यक है।ASP.Net में स्टेटस कोड 500 कैसे भेजें और फिर भी प्रतिक्रिया को लिखें?

header("HTTP/1.1 500 Internal Server Error"); 
header("Content-Type: text/plain"); 
echo "Unable to connect to database on $dbHost"; 

ASP.Net (सी #) बराबर होना चाहिए:: यह PHP में करने के लिए एक अपेक्षाकृत सीधा बात है

Context.Response.StatusCode = (int)HttpStatusCode.InternalServerError; 
Context.Response.ContentType = "text/plain"; 
Context.Response.Write("Unable to connect to database on " + dbHost); 
बेशक

, इस अपेक्षा के अनुरूप काम नहीं करता है; इसके बजाए, आईआईएस 500 स्थिति कोड को रोकता है, जो भी मैंने Response ऑब्जेक्ट पर लिखा है उसे ट्रैश करता है, और एप कॉन्फ़िगर किया गया है, इस पर निर्भर करता है कि यह डीबग जानकारी या कस्टम त्रुटि पृष्ठ भेजता है।

मेरा प्रश्न - मैं इस आईआईएस व्यवहार को कैसे दबा सकता हूं और सीधे अपने IHttpHandler कार्यान्वयन से त्रुटि जानकारी भेज सकता हूं?

यह ऐप PHP से पोर्ट है; क्लाइंट-साइड पहले से ही लिखा गया है, इसलिए मैं अनिवार्य रूप से इस spec के साथ अटक गया हूँ। 200 स्थिति कोड के साथ त्रुटियों को भेजना दुख की बात नहीं है।

आदर्श रूप में, मैं, प्रोग्राम के रूप में व्यवहार को नियंत्रित करने की जरूरत है क्योंकि यह एक SDK हम बिना किसी भी "संपादित इस फ़ाइल" वितरित करना चाहते हैं का हिस्सा है और अनुपूरक निर्देश "इस की स्थापना IIS बदलने "।

धन्यवाद!

संपादित करें: सॉर्ट किया गया। टिकट था। वाह।

+2

मैं इस तरह के एक उत्पादन साइट पर डेटाबेस स्थान के रूप में आंतरिक जानकारी देने से बचने चाहते हैं यदि संभव हो तो - हैकर्स इस सामग्री हो रही प्यार, उनके हमलों को बहुत आसान बना देता है। – devstuff

+1

अच्छा बिंदु, लेकिन यह एक सुरक्षित वेब सेवा है, न कि वेबसाइट। डाटाबेस कनेक्शन पहले सफल HTTP प्रमाणीकरण के बिना भी प्रयास नहीं किया जाता है :) –

उत्तर

101

+5

आईआईएस 7 में समर्थित - http://msdn.microsoft.com/en-us/library/system.web.httpresponse.tryskipiiscustomerrors%28v=VS.90%29.aspx – AUSteve

+0

यह इस तरह के उत्तर है जो मुझे एहसास करते हैं कि फ्रेमवर्क ऑब्जेक्ट संदर्भ के माध्यम से एक गुम कला बन रहा है। अगर मैं दो बार ऊपर उठ सकता था तो मैं चाहता था। –

0

आप एक कस्टमरर पेज सेट करना चाहते हैं (web.config के माध्यम से विन्यास योग्य)। आप सत्र में (या वैकल्पिक तंत्र के माध्यम से) में अपनी सामग्री को स्टोर कर सकते हैं, फिर कस्टम त्रुटि पृष्ठ प्रदर्शित करने के लिए एएसपीनेट कॉन्फ़िगर किया गया है जो आपके कस्टम आउटपुट को इन-टर्न प्रदर्शित करता है।

चेतावनी का एक शब्द, हालांकि: यदि 500 ​​आवेदन (यानी स्टैक ओवरफ्लो एक्सेप्शन) के साथ मौलिक समस्या के कारण होता है और आप एक पृष्ठ प्रदर्शित करने का प्रयास करते हैं जो asp.net (यानी MyCustomErrors.aspx) पर निर्भर करता है, तो आप एक लूप में खत्म हो सकता है।

अधिक जानकारी के लिए, this page देखें।

+0

धन्यवाद बॉबी। मैं customErrors निर्देश से परिचित हूं, लेकिन दुर्भाग्य से यह web.config फ़ाइल को संपादित करने पर निर्भर करता है, जो हमारे उपयोगकर्ता ऐसा करने में सक्षम नहीं हो सकते हैं।एक संभावित समाधान web.config फ़ाइल को प्रोग्रामेटिक रूप से संशोधित करना है, लेकिन यह आदर्श रूप से आदर्श से कम है। –

8

मैंने अतीत में निम्नलिखित का उपयोग किया है और पेज_लोड विधि में नीचे दिखाए गए कोड का उपयोग करके एक कस्टम संदेश के साथ 503 त्रुटि फेंकने में सक्षम है। लोड लोड बैलेंसर के लिए पिंग पेज के रूप में लोड करने के लिए मैं इस पृष्ठ का उपयोग लोड बैलेंसर के रूप में करता हूं यह जानने के लिए कि कोई सर्वर सेवा में है या नहीं।

उम्मीद है कि इससे मदद मिलती है।

 protected void Page_Load(object sender, System.EventArgs e) 
    { 
     if (Common.CheckDatabaseConnection()) 
     { 
      this.LiteralMachineName.Text = Environment.MachineName; 
     } 
     else 
     { 
      Response.ClearHeaders(); 
      Response.ClearContent(); 
      Response.Status = "503 ServiceUnavailable"; 
      Response.StatusCode = 503; 
      Response.StatusDescription= "An error has occurred"; 
      Response.Flush(); 
      throw new HttpException(503,string.Format("An internal error occurred in the Application on {0}",Environment.MachineName)); 
     } 
    } 
+0

हाय Paige। क्या यह एक .ashx फ़ाइल या नियमित .aspx फ़ाइल से था? मैंने स्पष्ट/फ्लश विधियों को जोड़ने की कोशिश की और इससे कोई फर्क नहीं पड़ता। मैंने एक नया एचटीपीएक्सप्शन फेंकने की भी कोशिश की और मुझे कुछ अतिरिक्त अवांछित HTML बकवास मिला। हालांकि, कोशिश अच्छी थी। –

+0

नील। यह नियमित .aspx पृष्ठ से था। क्षमा करें मुझे याद आया कि आप एक .ashx फ़ाइल के साथ काम कर रहे थे। –

+0

मेरे लिए पूरी तरह से काम किया, धन्यवाद। –

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