3 Stimmen

Ich kann mein benutzerdefiniertes Autorisierungsattribut nicht verwenden, wenn es in einer externen Assembly platziert wird.

Ich verwende ein benutzerdefiniertes AuthorizeAttribute in meinem Mvc4-Projekt:

public sealed class ClaimsAuthorizeAttribute : AuthorizeAttribute
{
    public ClaimsAuthorizeAttribute(){}

    protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext)
    {
        // Sicherheitsstuff hier...
        return base.AuthorizeCore(httpContext);
    }
}

Dann dekoriere ich Controlleraktionen mit diesem Attribut:

[ClaimsAuthorize(Roles = "Entwickler")]
public ActionResult Autorisieren()
{
    return View();
}   

Wenn ich die Attributklasse in mein MVC-Projekt einfüge, funktioniert alles wie erwartet.

Wenn ich die Attributklasse jedoch in einer externen Assembly platziere, auf die mein MVC-Projekt verweist, passiert nichts. Die Namespaces sind in beiden Fällen gleich. Die Referenzen meines externen Assembly-Projekts enthalten System.Web und System.Web.Mvc.

Ich kann nicht sehen, was fehlt. Hat jemand eine Idee?

2voto

rlesias Punkte 3720

Schließlich habe ich herausgefunden, was passiert ist: Das MVC-Projekt und die externe Assembly verwiesen auf unterschiedliche Nebenversionen von System.Web.Mvc (4.0.3 und 4.0.4, danke Reflector!)

Das externe Bibliotheksprojekt, das meine ClaimsAuthorizeAttribute-Klasse enthält, hatte die Eigenschaft "Spezifische Version" auf "true" gesetzt für seine Referenz zu System.Web.Mvc. Ich habe sie einfach auf "false" gesetzt und jetzt funktioniert alles einwandfrei!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X