Jeer
@Jeer
уверенный пользователь

Можно ли сделать сокращенное написание фильтров .net core 3.1?

Добрый день!
Использую .net core 3.1
Сделал кастомный фильтр:
public class AuthorizeRoles : Attribute, IFilterFactory
    {
        public bool IsReusable => false;
        public RoleEnum[] roles { get; set; }

        public IFilterMetadata CreateInstance(IServiceProvider serviceProvider)
        {
            var filter = serviceProvider.GetService(typeof(RolesValidation)) as RolesValidation;

            filter.roles = roles;

            return filter;
        }
    }


Теперь я могу его использовать в каких-нибудь методах:
[HttpPost]
        [Route("[action]")]
        [AuthorizeRoles(roles = new RoleEnum[] { RoleEnum.roleManagement, RoleEnum.admin })]
        public async Task SetRoles([FromBody] UserAndRolesDto dto)
        {
            await service.SetRoles(dto.UserId, dto.Roles);
        }


Проблема в том, что я хотел бы использовать сокращенную запись, что-то вроде такого:
[AuthorizeRoles(RoleEnum.roleManagement, RoleEnum.admin )]
//или даже
[Authorize(RoleEnum.roleManagement, RoleEnum.admin )]


Такую штуку можно было сделать в .net framework, так как можно было сделать конструктор с params RoleEnum[] roles, но в .net core не получается и не могу найти подходящей информации в поисковике
  • Вопрос задан
  • 96 просмотров
Решения вопроса 1
@yuopi
C# developer
Через конструктор работает:
public class MyTestAttribute : Attribute
    {
        public MyEnum[] Roles { get; set; }

        public MyTestAttribute(params MyEnum[] roles)
        {
            Roles = roles;
        }
    }


Использование:
[MyTest(MyEnum.One, MyEnum.Three, MyEnum.Two, MyEnum.Two)]
public void SomeMethod() { }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы