Я реализовал ClaimRequirementFilter , но обработка впрыска / параметров не работает. Конструктор AuthorizationFilter вызывается дважды. Свойство Name объекта (параметра) MyClaim во время первого вызова равно нулю, а во втором оно заполняется. OnAuthorization вызывается только один раз, используя нулевое значение.
MyClaimAttribute.cs
public class MyClaimAttribute : TypeFilterAttribute
{
public MyClaimAttribute(string claimName) : base(typeof(AuthorizationFilter))
{
MyClaim claim = new MyClaim
{
Name = claimName
};
Arguments = new object[] { claim };
}
}
AuthorizationFilter.cs
public AuthorizationFilter(MyClaim claim)
{
_claim = claim;
}
Startup.cs
services.AddTransient<MyClaim>();
services.AddMvc(options => options.Filters.Add(typeof(AuthorizationFilter)));
Контроллер метода украшен: [MyClaim("CanDoSomething")]
Обновление 1:
Удаление строки 'services.AddMvc' устранило проблему, но я хотел бы выполнить ее для каждого действия. Если один из методов не оформлен, пользователь не должен быть авторизован.