Как эффективно проверить, оформлено ли действие атрибутом (AuthorizeAttribute)?

Я использую MVC и имею ситуацию, когда в моем OnActionExecuting () мне нужно определить, используется ли метод Action который вот-вот будет выполнен, украшен атрибутом, в частности AuthorizeAttribute . Я не спрашиваю, прошла ли авторизация успешно / не удалось, вместо этого я спрашиваю, требует ли метод авторизации.

Для людей, не использующих mvc filterContext.ActionDescriptor.ActionName - это имя метода, который я ищу. Однако это не метод, выполняемый в данный момент; скорее, это метод, который будет выполнен в ближайшее время.

В настоящее время у меня есть блок кода, подобный приведенному ниже, но я не очень доволен циклом перед каждым действием. Есть ли лучший способ сделать это?

System.Reflection.MethodInfo[] actionMethodInfo = this.GetType().GetMethods();

foreach(System.Reflection.MethodInfo mInfo in actionMethodInfo) {
    if (mInfo.Name == filterContext.ActionDescriptor.ActionName) {
        object[] authAttributes = mInfo.GetCustomAttributes(typeof(System.Web.Mvc.AuthorizeAttribute), false);

        if (authAttributes.Length > 0) {

            

            break;
        }
    }
}

Это немного похоже на слегка ошибочное название « Как определить, украшен ли класс определенным атрибутом », но не совсем.

15
задан Community 23 May 2017 в 12:24
поделиться