Ich habe im ganzen Internet versucht, herauszufinden, warum mein benutzerdefiniertes AuthorizeAttribute in meinem MVC WebApi nicht funktioniert. Ich habe die Leute über diese Art der Sache auf SO fragen gesehen, aber nichts hat mir geholfen, doch mein Problem zu lösen:Benutzerdefiniertes AuthorizeAttribute, das nicht von MVC Framework aufgerufen wird
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false,
Inherited = false)]
public sealed class CustomAuthorization : AuthorizeAttribute
{
//...
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
// custom auth logic, returns true if authorized, false otherwise
}
}
ich von System.Web.Mvc
bin erstreckt, wie zu System.Web.Http
gegenüber. Jedoch wird mein AuthorizeCore(HttpContextBase httpContext)
nie aufgerufen.
Ich habe einen Konstruktor in meiner CustomAuthorization
Klasse, die ein params string[]
nimmt, die die Namen meiner benutzerdefinierten Berechtigungen für eine bestimmte Aktion erforderlich sind, zum Beispiel:
[CustomAuthorization("Some Permission")]
[System.Web.Http.HttpGet]
public CustomResponse SomeAction()
{
//...
}
Was ich hoffe, zu erreichen ist meine Genehmigung haben, Der Code wird ausgelöst, wenn eine Anfrage an eine mit dem Attribut [CustomAuthorization]
versehene Aktion gesendet wird. Ich möchte auch eine beschreibende Auth fehlgeschlagene Nachricht zurückgeben können, wenn die Autorisierung fehlschlägt. Nicht nur:
{"Message":"Authorization has been denied for this request."}
Ich glaube, das übergeordnete HandleUnauthorizedRequest
beinhaltet aber wie kann ich dies tun, um mein eigenes Objekt zu schaffen, dass eine JSON-Antwort wird serialisiert?
Zusammenfassend wird mein Autorisierungscode nie vom Framework aufgerufen, auch wenn ich die Aktionen mit meinem [CustomAuthorization]
Attribut dekoriere. Es geht einfach nur um den Code innerhalb der Aktion auszuführen.
Zweitens, wie kann ich die nicht autorisierten Antworten implementieren, um ein benutzerdefiniertes JSON-Objekt zu serialisieren?
Vielen Dank für Ihre Hilfe im Voraus, es wird sehr geschätzt!
Ausgehend von meinen Kommentaren, wie ich ein benutzerdefiniertes Berechtigungsattribut implementiert habe ... Für den Anfang, ich denke, Sie OnAuthorization, nicht AuthorizeCore überschreiben möchten. Ich bin mir auch nicht sicher, ob Sie Ihre Klasse versiegeln müssen. –