2012-09-04 8 views
5

मैं अपने आवेदन से उपयुक्त एचटीपी कोड और प्रतिक्रिया वापस करने की कोशिश कर रहा हूं लेकिन मैं संघर्ष कर रहा हूं। ऐसा लगता है कि विशिष्ट http प्रतिक्रियाओं को वापस करने के 2 तरीके हैं।वेबएपीआई एक्शन विधि में HttpResponseException फेंकना खाली 200 प्रतिक्रिया

तरह से मैं इसके साथ सौदा करना चाहते फेंक कर एक HttpResponseException:

public Information Get(int apiKey) 
{ 
    if (!_users.Authenticate(apiKey)) 
    { 
     var response = new HttpResponseMessage(); 
     response.StatusCode = (HttpStatusCode)401; 
     response.ReasonPhrase = "ApiKey invalid"; 

     throw new HttpResponseException(response); 
    } 

    return _info.Get(); 
} 

हालांकि, जब मैं करता हूँ यह प्रतिक्रिया मैं देख रहा हूँ बस एक खाली 200 प्रतिक्रिया है!

यह भी लगता है कि आप भी एक HttpResponseMessage इस तरह वापस जाने के लिए अपनी कार्रवाई विधि के हस्ताक्षर बदल सकते हैं:

public HttpResponseMessage Get() 
{ 
    if (!_users.Authenticate(apiKey)) 
    { 
     return Request.CreateResponse((HttpStatusCode) 401, "ApiKey invalid"); 
    } 

    return Request.CreateResponse((HttpStatusCode) 200, _info.Get()); 
} 

मैं वास्तव में यह करने के लिए अगर मैं इसे मदद कर सकते हैं नहीं करना चाहती, मैं ज्यादा होगा इसके बजाय मेरा वापसी प्रकार उस ऑब्जेक्ट के रूप में है जिसे मैं HttpResponseMessage में हर बार लपेटने के बजाय पुनर्प्राप्त करने का प्रयास कर रहा हूं।

क्या कोई कारण है कि पहली विधि संदेश के साथ 401 के बजाय खाली 200 लौट रही है जैसा कि मैं चाहता हूं?

उत्तर

5

दो संभावित समाधान;

पहलेMake sure your IIS is configured to let errors pass through

<configuration> 
    <system.webServer> 
    <httpErrors existingResponse="PassThrough" /> 
    </system.webServer> 
</configuration> 

दूसरा। मुझे पूरी तरह से यकीन नहीं है, लेकिन एएसपी.नेट वेब एपीआई may require you to develop a custom ActionFilter to properly translate Exceptions to result types। इस तरह से मैं व्यक्तिगत रूप से वेब एपीआई में से निपटने त्रुटि करना है:

  1. वेब एपीआई में फेंक दिया जा करने के लिए अपवाद किसी भी प्रकार की अनुमति दें, जैसे आप किसी भी अन्य .NET अनुप्रयोग
  2. एक कस्टम ActionFilter लिखें में क्या होता है कि अपवाद पकड़ता है और उन्हें उपयुक्त प्रारूप में अनुवाद करता है। उदाहरण के लिए, मैं एक कस्टम JSON प्रारूप में सभी अपवादों को क्रमबद्ध करता हूं। क्लाइंट-साइड पर, मेरे पास कुछ कस्टम AJAX ट्रिकरी है जो इस प्रारूप के आधार पर त्रुटियों (जैसे सत्यापन अपवाद) को संभाल सकती है।
+0

इसके लिए चीयर्स - अंत में अपवादों से निपटने के लिए मैंने फ़िल्टर का उपयोग करके अंत किया था धन्यवाद कि आप मुझे उस एमएसडीएन लेख – jcvandan

1

एचटीपी कॉन्फ़िगरेशन पर शामिल करें। डिफ़ॉल्ट रूप से, नीति स्थानीय रूप से वेब एपीआई एक्सेस करते समय त्रुटि विवरण दिखाना है।

+0

की ओर इशारा करते हुए धन्यवाद, मैं इसके लिए धन्यवाद – jcvandan

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