2014-10-13 10 views
9

हम अपने एएसपी.NET वेब एपीआई ऐप में प्रमाणीकरण करने के लिए OAuthAuthorizationServerProvider कक्षा का उपयोग कर रहे हैं।OAuthAuthorizationServerProvider के त्रुटि संदेश को कस्टमाइज़ कैसे करें?

यदि उपलब्ध कराया गया उपयोगकर्ता नाम और पासवर्ड GrantResourceOwnerCredentials में अमान्य है, कॉल

context.SetError("invalid_grant", "The user name or password is incorrect."); 

उत्पादन निम्नलिखित Json परिणाम:

{ 
    "error": "invalid_grant", 
    "error_description": "The user name or password is incorrect." 
} 

वहाँ इस त्रुटि परिणाम अनुकूलित करने के लिए कोई तरीका है?

{ 
    "message": "Some error occurred." 
} 

इस OAuthAuthorizationServerProvider साथ प्राप्त करने के लिए संभव है:
मैं इसे डिफ़ॉल्ट त्रुटि संदेश एपीआई के अन्य भागों में प्रयोग किया जाता प्रारूप के अनुरूप बनाने के लिए चाहते हैं?

+1

जबकि नीचे दिए गए उत्तर ऐसा करने के तरीके का प्रदर्शन, मैं,, ऐसा करने के खिलाफ चेतावनी देते हैं के रूप में डिफ़ॉल्ट प्रतिक्रिया OAuth 2.0 विनिर्देशों के अनुरूप लौटे जबकि अपने संशोधित जवाब नहीं होगा । यह केवल आंतरिक एपीआई के लिए स्वीकार्य हो सकता है। हालांकि, अगर यह एपीआई सार्वजनिक रूप से सुलभ है, तो आप शायद विनिर्देशों का पालन करना चाहते हैं और नए सम्मेलनों का आविष्कार नहीं करना चाहते हैं। – Chris

+0

मैंने पाया कि ये उत्तर काम नहीं करते हैं और ऐसा लगता है कि एक मानक वेब एपीआई प्रतिक्रिया की तरह दिखने के लिए ओएथ प्रतिक्रिया होने के नाते ऐसा लगता है जितना आसान हो सकता है। – Sam

उत्तर

7

इस तरह मैंने इसे किया।

string jsonString = "{\"message\": \"Some error occurred.\"}"; 

// This is just a work around to overcome an unknown internal bug. 
// In future releases of Owin, you may remove this. 
context.SetError(new string(' ',jsonString.Length-12)); 

context.Response.StatusCode = 400; 
context.Response.Write(jsonString); 
+1

एक नोट के रूप में मैंने संदर्भ को ओवरराइड करने के लिए ओविन मिडलवेयर क्लास बनाने का प्रयास किया था। रिस्पॉन्स.बॉडी, लेकिन अगर कोई कोशिश करता है तो यह काम नहीं करता है। यह पूरी तरह से काम किया। – DDiVita

+1

यह मेरे लिए वेब एपीआई 2 पर काम नहीं करता है। आपके द्वारा उल्लिखित आंतरिक बग की वजह से प्रतिक्रिया उचित जेसन नहीं थी। – Sam

5

दासुन के उत्तर के लिए +1। यहां बताया गया है कि मैंने इसे थोड़ा और बढ़ाया।

public class ErrorMessage 
{ 
    public ErrorMessage(string message) 
    { 
     Message = message; 
    } 

    public string Message { get; private set; } 
} 

public static class ContextHelper 
{ 
    public static void SetCustomError(this OAuthGrantResourceOwnerCredentialsContext context, string errorMessage) 
    { 
     var json = new ErrorMessage(errorMessage).ToJsonString(); 

     context.SetError(json); 
     context.Response.Write(json); 
    } 
} 

। टोज़सनस्ट्रिंग() एक और विस्तार विधि है जो न्यूटॉन्सॉफ्ट.जेसन लाइब्रेरी का उपयोग करती है।

public static string ToJsonString(this object obj) 
    { 
     return JsonConvert.SerializeObject(obj); 
    } 

उपयोग:

context.SetCustomError("something went wrong"); 
+0

बिल्कुल वही जो मैं खोज रहा था। धन्यवाद! – vincentw56

+1

यह मेरे लिए वेब एपीआई 2 के नवीनतम संस्करण के साथ काम नहीं किया। – Sam

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