我建立一個ASP.NET MVC應用5,並按照本SO post的例子申請[Flags]
到enum
:上[授權(角色)]使用枚舉[國旗]和位運算符
[Flags]
public enum Role
{
User = 1,
Finance = 2,
Management = 4,
SystemAdmin = 8
}
注意的是,[Flags]
屬性爲我們提供了一個很好的方式來獲得多個值作爲一個逗號分隔字符串:
var roles = (Constants.Role.SystemAdmin | Constants.Role.Management).ToString();
// "SystemAdmin, Management"
枚舉值將在控制器和行動,像這樣的[Authorize]
屬性一起使用:
[Authorize(Roles = (Constants.Role.SystemAdmin | Constants.Role.Management).ToString())]
public class SomeController : Controller
{ ... }
然而,上面的屬性生成此錯誤:
An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type
我爲什麼可以使用.ToString()
方法,並得到一個CSV在代碼中枚舉,但在[Authorize]
屬性用同樣的語句時,不?
因爲,錯誤說*「一個屬性參數必須是一個常量表達式」*。這意味着你不能在屬性中調用一個方法(比如'ToString()'),因爲它不能保證是常量。 –
謝謝,@MattBurland。任何想法如何得到這個工作?或者當它用於像這樣的屬性時,它是不可能的? – Alex
不可能使用這樣的屬性。你可以做的是創建一個屬性,該屬性具有'Role'類型的'RolesEnum'屬性,它在setter中將'Roles'字符串屬性設置爲'value.ToString()'。這可能會起作用。 –