2014-10-13 21 views
9

Wir verwenden die Klasse OAuthAuthorizationServerProvider, um die Autorisierung in unserer ASP.NET Web API App durchzuführen.Wie wird die Fehlermeldung von OAuthAuthorizationServerProvider angepasst?

Wenn der angegebene Benutzername und das Kennwort in GrantResourceOwnerCredentials ungültig ist, wird der Anruf

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

erzeugt folgendes Json Ergebnis:

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

Gibt es eine Möglichkeit, diesen Fehler Ergebnis anpassen?
Ich mag es mit Standard-Fehlermeldung Format macht konsistent in anderen Teilen der API verwendet:

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

Ist das möglich mit den OAuthAuthorizationServerProvider zu erreichen?

+1

Während unten die Antworten zeigen, wie dies zu tun, ich würde das warnen vor zu tun, als die Standardantwort entspricht die OAuth 2.0-Spezifikation zurück, während Ihre modifizierte Antwort würde nicht . Dies kann für interne APIs akzeptabel sein. Wenn diese API jedoch öffentlich zugänglich ist, möchten Sie wahrscheinlich die Spezifikation befolgen und keine neuen Konventionen erfinden. – Chris

+0

Ich fand, dass diese Antworten nicht funktionieren und es scheint, dass die OAuth-Antwort mehr wie eine Standard-Web-API-Antwort aussieht, ist nicht so einfach, wie man meinen könnte. – Sam

Antwort

7

So habe ich es gemacht.

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

Als eine Notiz hatte ich versucht, eine OwinMiddleware-Klasse zu erstellen, um die context.Response.Body zu überschreiben, aber das hat auch nicht funktioniert, wenn jemand versucht. Das hat perfekt funktioniert. – DDiVita

+1

Dies funktionierte nicht für mich auf Web-API 2. Die Antwort war nicht richtig json, wegen der internen Fehler, die Sie erwähnt haben. – Sam

5

+1 für Dasuns Antwort. Hier habe ich es ein bisschen weiter ausgedehnt.

Die .ToJsonString() ist eine andere Erweiterungsmethode, die die Newtonsoft.Json-Bibliothek verwendet.

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

Verbrauch:

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

Genau das, was ich gesucht habe. Vielen Dank! – vincentw56

+1

Dies funktionierte bei mir nicht mit der neuesten Version von web api 2. – Sam

Verwandte Themen