Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取在mvc中执行的OnAction中控制器的角色属性_C#_Asp.net Mvc_Asp.net Mvc 4_Actionfilterattribute - Fatal编程技术网

C# 获取在mvc中执行的OnAction中控制器的角色属性

C# 获取在mvc中执行的OnAction中控制器的角色属性,c#,asp.net-mvc,asp.net-mvc-4,actionfilterattribute,C#,Asp.net Mvc,Asp.net Mvc 4,Actionfilterattribute,我想在OnActionExecuting方法中读取控制器的过滤器属性。 为此,我编写了这段代码,但这个数组是空的 public class BaseController : Controller { protected override void OnActionExecuting(ActionExecutingContext filterContext) { var getActionName = filterContext.Ac

我想在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();
        }
    }

我想获取执行控制器的允许角色列表。

您可以使用
ActionDescriptor
ControllerDescriptor
GetFilterAttributes
方法:

    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);
        ...
    }
受保护的覆盖无效OnActionExecuting(ActionExecutingContext filterContext)
{
var filters=新列表();
filters.AddRange(filterContext.ActionDescriptor.GetFilterAttributes(false));
filters.AddRange(filterContext.ActionDescriptor.ControllerDescriptor.GetFilterAttributes(false));
var roles=filters.OfType().Select(f=>f.roles);
...
}