2012-08-29 6 views
6

Ich möchte nur nicht "Manager" für jedes Attribut verwenden und einige enum dafür verwenden.Verwenden Sie den Namen des Enum-Elements wie einen Attribut-Parameter

Aber es scheint, dass es unmöglich ist oder ich falsch liege?

Also versuche ich

[RequiresRole("Managers")] 

mit

[RequiresRole(HardCodedRoles.Managers.ToString())] 

... 

public enum HardCodedRoles 
{ 
      Administrators, 
      Managers 
} 
+1

Könnten Sie mehr Details hinzufügen, so dass wir wissen, was es ist, dass Sie versuchen, zu erreichen? – Maciej

+0

Ich möchte einfach nicht die Zeichenfolge "AnyRoleName" verwenden und ich möchte stattdessen ein Element von enum einfügen. Aber VS gibt einen Fehler aus Ein Attributargument muss ein konstanter Ausdruck sein, typeof Ausdruck oder Array-Erstellungsausdruck eines Attributparametertyps –

+1

Wenn HardcodedRoles.Managers eine Const-Zeichenfolge ist, würde dies funktionieren. Auf der anderen Seite, wenn HardcodedRoles eine Aufzählung ist, müssen Sie das AuthorizeAttribute ableiten und Ihre eigenen implementieren, indem Sie HardcodedRoles und/oder HardcodedRoles [] an den Konstruktor übergeben. – Maciej

Antwort

11

Wie wäre es eine Klasse anstelle eines Enum die Klasse statisch machen, um jemanden zu meiden: ing?

public static class HardCodedRoles 
{ 
    public const string Managers = "Managers"; 
    public const string Administrators = "Administrators"; 
} 

[RequiresRole(HardCodedRoles.Managers)] 
+0

Ja !!! Das ist die Lösung !!!! Verdammt! Es ist leicht!!! :))) –

+1

Das hindert jemanden nicht daran, '[RequiresRole (" fred ")]' zu verwenden. Reicht das aus? –

2

Der Grund, warum Sie den Fehler sehen zu ersetzen ist, weil ToString() ist ein Methode und somit kann der Wert nicht bei der Kompilierung berechnet werden.

Wenn Sie [RequiresRole (HardCodedRoles.Managers)] stattdessen verwenden können, können Sie die ToString an anderer Stelle in Ihrem Code ausführen, und dies könnte Ihnen die Funktionalität geben, die Sie benötigen. Dazu müssen Sie den Parameter Ihres Attributs von string in HardCodedRoles ändern.

(Ich könnte mir vorstellen, dass die Verwendung einer const wird nicht funktionieren, weil die Art des Parameters noch string sein wird, so wird der Eingang nicht eingeschränkt werden.)

+1

Danke! Könnten Sie bitte ein Beispiel von "Wenn Sie stattdessen [RequiresRole (HardCodedRoles.Managers)] verwenden können, können Sie den ToString an anderer Stelle in Ihrem Code ausführen, und dies könnte Ihnen die benötigte Funktionalität geben." –

+0

Wofür benötigen Sie ein Beispiel? von? –

+0

Oh nein danke! Ich habe schon eine Antwort. –

1

Sie auch die nameof Schlüsselwort verwenden könnte, d.h .:

[RequiresRole(nameof(HardCodedRoles.Managers))] 
Verwandte Themen