На основе найденного решения здесь Я написал код, который исправляет именно то, что я хотел.
Создание базы пользовательских атрибутов авторизации на основе AuthorizeAttribute и метода переопределения OnAuthorization:
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext != null)
{
object[] attributes = filterContext.ActionDescriptor.GetCustomAttributes(false);
if (attributes != null)
{
foreach (var attribute in attributes)
if (attribute is UnAuthorizedAttribute)
return;
}
}
base.OnAuthorization(filterContext);
}
Я использую отражение здесь, чтобы распознать действие с атрибутом UnAuthorized. Я не знаю о проблемах производительности в этом случае, но это решает проблему полностью.