получить атрибут ролей контроллера в OnActionExecuting в mvc

Я хочу прочитать атрибуты фильтра контроллера в методе OnActionExecuting. для этого я написал этот код, но этот пустой массив.

public class BaseController : Controller
    {
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var getActionName = filterContext.ActionDescriptor.ActionName;
            var getControllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
            var getUserName = User.Identity.Name;
            var getUserRoles = Roles.GetRolesForUser(getUserName);
            foreach (var filter in filterContext.ActionDescriptor.GetCustomAttributes(typeof(Roles), false))
            {
                var desiredValue = filter.ToString();
            }
           //some business logic here 
        }
    }

это мой контроллер

[Authorize(Roles = "Admin")]
    public class AdminController : BaseController
    {
         public ActionResult Index()
        {

            return View();
        }
    }

Я хочу получить список разрешенных ролей для выполнения контроллера.


person Amit Kumar    schedule 14.06.2015    source источник


Ответы (1)


Вы можете использовать GetFilterAttributes метод ActionDescriptor или ControllerDescriptor:

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var filters = new List<FilterAttribute>();
        filters.AddRange(filterContext.ActionDescriptor.GetFilterAttributes(false));
        filters.AddRange(filterContext.ActionDescriptor.ControllerDescriptor.GetFilterAttributes(false));
        var roles = filters.OfType<AuthorizeAttribute>().Select(f => f.Roles);
        ...
    }
person alisabzevari    schedule 14.06.2015