C# 获取在mvc中执行的OnAction中控制器的角色属性
我想在OnActionExecuting方法中读取控制器的过滤器属性。 为此,我编写了这段代码,但这个数组是空的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
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);
...
}