Возвращаясь к ссылке, которую я разместил: stackoverflowQuestion Я смог заставить ее работать в моей ситуации.Кажется, что происходит, когда вызов моего действия сначала просматривает атрибут с уровня Controller, но использование filterContext.ActionDescriptor.IsDefined внутри метода OnAuthroization скажет мне, если к вызываемому действию прикреплен мой атрибут override.Если он пропустит вызов метода base.OnAuthorization, то будет вызван атрибут override.
Итак, мне нужно было создать класс переопределения и расширить свой пользовательский класс авторизации.У меня есть флаг, объявленный в родительском и установленный в конструкторе класса переопределения, чтобы сказать мне, вызывает ли метод авторизации переопределения методы авторизации моего пользовательского класса авторизации.
Вот пример, чтобы разобраться во всем этом.
public class AuthorizeUserAttribute : AuthorizeAttribute
{
protected bool isOverrideAuthorize = false;
public AuthorizeUserAttribute(params...)
{
}
public AuthorizeUserAttribute(MenuItems...)
{
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
var action = filterContext.ActionDescriptor;
if (action.IsDefined(typeof(OverrideAuthorizeUserAttribute), true) && !isOverrideAuthorize)
{
return;
}
base.OnAuthorization(filterContext);
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
}
}
Класс переопределения:
public class OverrideAuthorizeUserAttribute : AuthorizeUserAttribute
{
public OverrideAuthorizeUserAttribute(params...) : base(roles)
{
base.isOverrideAuthorize = true;
}
public OverrideAuthorizeUserAttribute(MenuItems...) : base(item)
{
base.isOverrideAuthorize = true;
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
return base.AuthorizeCore(httpContext);
}
}
Это позволило мне выполнить авторизацию для действия исключительно на атрибуте авторизации, объявленном для этого действия, а не на атрибуте авторизации на контроллере ANDметод действия по умолчанию.
Кроме того, MVC5, похоже, решает эту проблему путем включения атрибута "OverrideAuthorization". К сожалению, я все еще нахожусь на MVC4.