我只是想不要为每个属性使用“Managers”,并为此使用一些枚举。
但似乎不可能或我错了?
所以我尝试替换
[RequiresRole("Managers")]
带
[RequiresRole(HardCodedRoles.Managers.ToString())]
...
public enum HardCodedRoles
{
Administrators,
Managers
}
答案 0 :(得分:10)
如果一个类而不是一个枚举,让这个类保持静态以避免一个新的东西:它呢?
public static class HardCodedRoles
{
public const string Managers = "Managers";
public const string Administrators = "Administrators";
}
[RequiresRole(HardCodedRoles.Managers)]
答案 1 :(得分:5)
您还可以使用nameof关键字,即:
[RequiresRole(nameof(HardCodedRoles.Managers))]
答案 2 :(得分:2)
您看到错误的原因是因为ToString()
是方法,因此无法在编译时计算该值。
如果您可以使用[RequiresRole(HardCodedRoles.Managers)],则可以在代码中的其他位置执行ToString
,这可以为您提供所需的功能。这需要您将属性的参数从string
更改为HardCodedRoles
。
(我认为使用const
将不起作用,因为参数的类型仍为string
,因此输入不会受到限制。)