У меня есть несколько атрибутов, которые я хочу применить на контроллере. Мне нужно вызвать их в порядке последовательности, потому что если первые Атрибуты выполняются, я инициализирую переменные, которые будет использовать следующий атрибут.C# multiple Attributes Calling Sequence
[AuthorizeLicense]
[MerchantLoggedIn]
[MerchantAuthorize]
public class MerchantController : BaseController
{
}
Определение моих атрибутов
public class AuthorizeLicense:AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if(somecondition is true){
//initialize variables for next attribute use;
}
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
}
}
Следующая Атрибут
public class MerchantLoggedIn:AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
//use initialize variables from previous attribute
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
}
}
Проблема я столкнулся в том, что атрибуты не вызываются в последовательности, как я определил их в классе ; то есть сверху вниз. Пожалуйста, помогите .. что я делаю неправильно.
Похоже разбитого дизайн для меня, если атрибут работает только тогда, когда другой также установлен, то вы можете инкапсулировать его в последний в любом путь. Что вы делаете, если какой-либо разработчик предоставляет только один атрибут? – HimBromBeere
Просто подумайте вслух, но вы можете передать другие 2 атрибута в первый как параметры, но если Im честный, мне не нравится идея или атрибуты, зависящие друг от друга. Редактировать. HimBromBeere избил меня до этого – Matt
Если MerchantLoggedIn всегда нуждается в AuthorizeLicense, вы можете наследовать от AuthorizeLicense и просто использовать один атрибут. – Mant101