webentwicklung-frage-antwort-db.com.de

Zurückgeben einer benutzerdefinierten Nachricht, wenn die Autorisierung in der Web-API fehlgeschlagen ist

In meinem WebAPI-Projekt habe ich eine Reihe von APIs, die mit [Authorize] Attribut.

[Authorize]
public HttpResponseMessage GetCustomers()
{
   //my api
}

Falls der Benutzer nicht über das Rechtstoken verfügt, wird dem Benutzer eine Ausnahmebedingung "Zugriff verweigert" zurückgegeben.

Was ich aber brauche, ist, dass ich in einem solchen Fall die benutzerdefinierte Antwortnachricht als zurückgeben muss.

{
  "StatusCode" : 403,
  "message": "You donot have sufficient permission"
}

Wie kann ich diese benutzerdefinierte Nachricht zurückgeben, wenn die Autorisierung fehlschlägt?.

Bitte beachten Sie:

  • Ich verwende die Owin-Token-basierte Authentifizierung.
  • Ich speichere nicht das Zugriffstoken in meiner Datenbank oder an einem anderen Ort.
17
Kgn-web

Es gibt verschiedene Möglichkeiten, dies zu tun, aber eine der besten Möglichkeiten sind benutzerdefinierte Berechtigungsattribute. Sie müssen lediglich die AuthorizeAttribute-Methode erben und die HandleUnauthorizedRequest()-Methode überschreiben.

public class CustomAuthorization : AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(HttpActionContext actionContext)
    {
        actionContext.Response = new HttpResponseMessage
        {
            StatusCode = HttpStatusCode.Forbidden,
            Content = new StringContent("You are unauthorized to access this resource")
        };
    }
}

und benutze dies wie folgt (CustomAuthorization sollte anstelle von Authorize verwendet werden)

    [CustomAuthorization]       
    public IHttpActionResult Get()
    {
        return Ok();
    }

Andernfalls können Sie den Statuscode auch auf der Clientseite abrufen und die benutzerdefinierte Nachricht Ihrer Wahl anzeigen.