过滤器可以从我的BaseController访问属性吗?

时间:2014-09-24 18:30:02

标签: c# asp.net-mvc action-filter

我有一个基本控制器,它具有如下属性:

public class BaseController : Controller 
{
    public User CurrentUser {get;set;}

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // if session cookie found, set User object here
    }
}

现在我想创建一个动作文件管理器,我可以在控制器或动作上设置我想做的事情:

if (User.IsAdmin) 
{
} 
else 
{
    // redirect to login or some page 
}

所以这个过滤器@AdminOnly我可以放置一个控制器或动作,这将确保只有设置了IsAdmin标志的用户才能查看该动作。

过滤器是否可以看到当前正在执行的控制器?

1 个答案:

答案 0 :(得分:3)

你不能使用

if (filterContext.Controller is BaseController)
{
    BaseController ctr = (BaseController)filterContext.Controller;
    if (ctr.User.IsAdmin)
    {....}
}

Link