Я определил следующий пользовательский атрибут:
[AttributeUsage(AttributeTargets.All)]
public class CustomAuthAttribute : AuthorizeAttribute
{
private MyPermissionLevels requestedAccessLevel;
public CustomAuthAttribute(object AccessLevel = null)
{
AccessLevel = AccessLevel ?? MyPermissionLevels.View;
if(AccessLevel.GetType() != typeof(MyPermissionLevels))
{
throw new ArgumentException("AccessLevel is invalid.");
}
this.requestedAccessLevel = (MyPermissionLevels)AccessLevel;
}
... // Other Auth Stuff
}
Когда я применяю этот атрибут к контроллеру, как, например, [CustomAuthAttribute (AccessLevel = MyPermissionLevels.Modify)]
intellisense, жалуется, что:
Типили имя пространства имен 'AccessLevel' не найдено.( и т. Д. )
Потенциальные исправления, выявленные Alt + Ввод , включают:
Измените AccessLevel на AccessLevel:
Добавление этого двоеточия (и подразумеваемое удаление оператора =
, который не является автоматическим элементом предлагаемого исправления) устраняет ошибку компиляции.
Я в порядке, используя другой синтаксис, если это все, что нужно.Однако, Я хотел бы понять, что я сделал, что мешает мне использовать более общий синтаксис инициализации поля атрибута , как описано в ответах на Путаница именованных параметров , и как это можно сделатьс родительским классом:
[Authorize(Roles = "Modifiers")]