2015-07-03 12 views
44

लौटने का सही तरीका मेरे पास एक एमवीसी वेबपी साइट है जो अनुरोध प्रमाणित करने के लिए ओएथ/टोकन प्रमाणीकरण का उपयोग करती है। सभी प्रासंगिक नियंत्रकों के पास सही गुण हैं, और प्रमाणीकरण ठीक काम कर रहा है।एएसपी.नेट वेब एपीआई: 401/अनधिकृत प्रतिक्रिया

समस्या यह है कि सभी अनुरोध किसी विशेषता के दायरे में अधिकृत नहीं किए जा सकते हैं - कुछ प्रमाणीकरण जांच को कोडर में किया जाना चाहिए जिसे नियंत्रक विधियों द्वारा बुलाया जाता है - 401 अनधिकृत प्रतिक्रिया वापस करने का सही तरीका क्या है इस मामले में?

मैंने throw new HttpException(401, "Unauthorized access"); की कोशिश की है, लेकिन जब मैं ऐसा करता हूं तो प्रतिक्रिया स्थिति कोड 500 है और मुझे एक स्टैक ट्रेस भी मिलता है। यहां तक ​​कि हमारे लॉगिंग डेलीगेटिंग हैंडलर में हम देख सकते हैं कि प्रतिक्रिया 500 है, 401 नहीं।

उत्तर

70

आप अपने एपीआई विधि से एक HttpResponseException फेंक दिया जाना चाहिए, HttpException नहीं:

throw new HttpResponseException(HttpStatusCode.Unauthorized); 

या, आप एक कस्टम संदेश की आपूर्ति करना चाहते हैं :

var msg = new HttpResponseMessage(HttpStatusCode.Unauthorized) { ReasonPhrase = "Oops!!!" }; 
throw new HttpResponseException(msg); 
+0

बस यह ठीक से काम कर रहा है, धन्यवाद! – GoatInTheMachine

4

आपको 500 प्रतिक्रिया कोड मिलता है क्योंकि आप एक अपवाद फेंक रहे हैं (HttpException) जो किसी प्रकार की सर्वर त्रुटि इंगित करता है, यह गलत है दृष्टिकोण।

बस सेट प्रतिसाद स्थिति कोड .eg

Response.StatusCode = (int)HttpStatusCode.Unauthorized; 
+0

यह थोड़ा अजीब तो है कि अपवाद लेता है HTTP स्टेटस कोड पैरामीटर के रूप में, और इंटेलिसेंस डॉक्स का कहना है कि यह क्लाइंट को भेजा गया स्टेटस कोड है - मैं उम्मीद कर रहा था कि प्रतिक्रिया को सीधे अपने आप को विचलित करने से बचें क्योंकि यह त्रुटि प्रतीत होता है, इसकी वैश्विक स्थिति – GoatInTheMachine

+1

आधार वेब एपीआई नियंत्रक के रूप में देख रहा है एक 'आर खुलासा नहीं करता है esponse' संपत्ति। – LukeH

46

बस निम्न को वापस करें:

return Unauthorized(); 
+0

मुझे लगता है कि विशेष रूप से ओपी के प्रश्न स्वीकार किए गए उत्तर। मेरा जवाब प्रश्न के शीर्षक का जवाब देता है "एएसपी.नेट वेब एपीआई: 401/अनधिकृत प्रतिक्रिया वापस करने का सही तरीका" – JohnWrensby

2

अन्य उत्तर के लिए एक विकल्प है, तो आप भी इस इस्तेमाल कर सकते हैं के रूप में:

return Content(HttpStatusCode.Unauthorized, "My error message"); 

जाहिर कारण परिच्छेद सुंदर वैकल्पिक (Can an HTTP response omit the Reason-Phrase?)

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