В дополнение к моему комментарию выше, я протестировал следующее решение в ASP.Net Core 3.
public override void OnActionExecuting(ActionExecutingContext context)
{
var allowAnonAttr = Attribute.GetCustomAttribute(context.Controller.GetType(), typeof(AllowAnonymousAttribute));
if(allowAnonAttr != null)
{
// do something
}
}
В более старых версиях ASP.NET вы также должны ссылаться на System.Reflection
, чтобы использоватьрасширения GetCustomAttribute
.
Обратите внимание, что это решение работает для атрибутов, помещенных в сам класс контроллера (как задано в вопросе), но не будет работать для атрибутов, размещенных в методах действия. Чтобы заставить его работать для методов действия, ниже работает:
public override void OnActionExecuting(ActionExecutingContext context)
{
var descriptor = context.ActionDescriptor as ControllerActionDescriptor;
var actionName = descriptor.ActionName;
var actionType = context.Controller.GetType().GetMethod(actionName);
var allowAnonAttr = Attribute.GetCustomAttribute(actionType, typeof(AllowAnonymousAttribute));
if(allowAnonAttr != null)
{
// do something
}
}