2011-08-23 11 views
6

मैं किसी सेवा द्वारा प्राप्त HTTP अनुरोध को सत्यापित करने का प्रयास कर रहा हूं। मैं यह जांचना चाहता हूं कि सभी आवश्यक शीर्षलेख मौजूद हैं या नहीं। यदि नहीं, तो मैं एक अपवाद फेंकना चाहता हूं, जो किसी स्थान पर, उचित प्रतिक्रिया कोड और प्रतिक्रिया की स्थिति रेखा निर्धारित करेगा। मैं किसी भी विशिष्ट त्रुटि पृष्ठ पर उपयोगकर्ता को रीडायरेक्ट नहीं करना चाहता, बस जवाब भेजें।HTTP अनुरोधों को सत्यापित करने और Global.asax में विशिष्ट HTTP प्रतिक्रियाओं को वापस करने का एक उचित तरीका क्या है?

मुझे आश्चर्य है कि मुझे कोड कहां रखना चाहिए? मेरा पहला अनुमान Application_BeginRequest में अनुरोधों को सत्यापित करना था, त्रुटि पर अपवाद फेंकना और Application_Error में इसे संभालना था।

उदाहरण के लिए:

public void Application_BeginRequest(object sender, EventArgs e) 
{ 
    if(!getValidator.Validate(HttpContext.Current.Request)) 
    { 
     throw new HttpException(486, "Something dark is coming"); 
    } 
} 

public void Application_Error(object sender, EventArgs e) 
{ 
    HttpException ex = Server.GetLastError() as HttpException; 
    if (ex != null) 
    { 
      Context.Response.StatusCode = ex.ErrorCode; 
      Context.Response.Status = ex.Message; 
    } 
} 

जाहिर है, ऐसे मामलों में दृश्य स्टूडियो Application_BeginRequest में एक बिना क्रिया का अपवाद के बारे में शिकायत। यह काम करता है, क्योंकि दिया गया कोड क्लाइंट को वापस कर दिया जाता है, लेकिन मुझे लगता है कि इस दृष्टिकोण के साथ कुछ गलत है।

[संपादित करें]: मैंने कस्टम स्थिति रेखा के बारे में दूसरा प्रश्न हटा दिया है, क्योंकि ये प्रश्न वास्तव में जुड़े नहीं हैं।

सहायता के लिए धन्यवाद।

+0

डब्ल्यूसीएफ कहां खेलता है? क्या आप एक आरईएसटी सेवा बना रहे हैं जो आईआईएस में होस्ट किया गया है? –

+0

ठीक है, हाँ। मेरा मानना ​​है कि यह एक विकल्प है, एक प्रबंधित विंडोज सेवा/प्रबंधित ऐप (एमएसडीएन के अनुसार) के रूप में एक सेवा की मेजबानी करने का विरोध किया –

उत्तर

6

दृश्य स्टूडियो डिफ़ॉल्ट रूप से निष्पादन को तोड़ देता है जब अपवाद फेंक दिया जाता है। आप डीबग -> अपवादों पर जाकर और सामान्य भाषा रनटाइम अपवादों के बगल में स्थित चेक बॉक्स को अनचेक करके इस व्यवहार को बदल सकते हैं। हालांकि, यहां मुख्य समस्या यह है कि आप अपवाद फेंक रहे हैं ताकि आप इसे पकड़ सकें और प्रतिक्रिया पर स्टेटस कोड सेट कर सकें। आप अपवाद फेंकने के बिना ऐसा कर सकते हैं। जैसे void Application_BeginRequest(object sender, EventArgs e) { if(!getValidator.Validate(HttpContext.Current.Request)) { HttpContext.Current.Response.StatusCode = 403 var httpApplication = sender as HttpApplication; httpApplication.CompleteRequest(); } }

+0

जो मेरी समस्या हल करता है, बहुत बहुत धन्यवाद! –

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