2013-01-10 33 views
7

जेएसओएन का जवाब देने वाले एएसपी.नेट एएसएमएक्स वेबमाउथ में, क्या मैं एक अपवाद फेंक सकता हूं & HTTP प्रतिक्रिया कोड सेट करें? मैंने सोचा कि अगर मैंने एक एचटीपीएक्सप्शन फेंक दिया है, तो स्टेटस कोड उचित रूप से सेट किया जाएगा, लेकिन यह 500 त्रुटि के अलावा किसी भी चीज़ का जवाब देने के लिए सेवा नहीं प्राप्त कर सकता है।क्या मैं HTTP प्रतिक्रिया कोड सेट कर सकता हूं और एक एएसएमएक्स JSON सेवा पर अपवाद फेंक सकता हूं?

[WebMethod] 
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] 
public void TestWebMethod() { 
    throw new HttpException((int)HttpStatusCode.BadRequest, "Error Message"); 
} 

इसके अलावा:

[WebMethod] 
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] 
public void TestWebMethod() { 
    try { 
     throw new HttpException((int)HttpStatusCode.BadRequest, "Error Message"); 
    } 
    catch (HttpException ex) { 
     Context.Response.StatusCode = ex.GetHttpCode(); 
     throw ex; 
    } 
} 

इन दोनों 500

बहुत धन्यवाद के साथ जवाब

मैं निम्नलिखित की कोशिश की है।

+0

आप इस के साथ कहीं भी मिला होगा? –

+0

मुझे डर नहीं है। – Markus

उत्तर

2

इस के लिए अपने कोड में परिवर्तित करें:

[WebMethod] 
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] 
public void TestWebMethod() { 
    try { 
     throw new HttpException((int)HttpStatusCode.BadRequest, "Error Message"); 
    } 
    catch (HttpException ex) { 
     Context.Response.StatusCode = ex.GetHttpCode(); 

     // See Markus comment 
     // Context.Response.StatusDescription("Error Message"); 
     // Context.Response.StatusDescription(ex.Message); // exception message 
     // Context.Response.StatusDescription(ex.ToString()); // full exception 
    } 
} 

मूल रूप से आप नहीं, कि है, जब एक अपवाद फेंक कर सकते हैं परिणाम हमेशा एक ही 500

+0

इससे रिवर्स समस्या होती है। अपवाद कभी प्रतिक्रिया को नहीं बनाता है। क्लाइंट का स्टेटस कोड है लेकिन त्रुटि संदेश नहीं है। – Markus

+0

क्यों प्रतिक्रिया नहीं है। स्टेटस डिस्क्रिप्शन (ex.ToString()) दोनों के पास है? बस मेरा जवाब अपडेट किया गया। –

+1

स्थिति डिस्क्रिप्शन स्टेटसकोड दर्पण करना चाहिए (200 के लिए ठीक है, 404 के लिए नहीं मिला, आदि)। यह एक कस्टम मूल्य नहीं होना चाहिए। – Markus