AuthorizeAttribute方法的ASP.NET Access控制器属性

时间:2017-02-07 14:01:57

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

我使用MVC 4项目为API创建了一个基本控制器。一切都按我的意愿工作,但为了提高效率,我希望能够从OnAuthorization方法访问我的基本控制器中的一些自定义属性。我需要执行一些SQL查询以确保访问令牌有效等等。我宁愿做一次这个查询并将对象存储为控制器上的属性,这样我以后就可以访问它而无需再次进行查询。

简而言之,这就是我想要做的事。

[APIActionFilter]
public class APIBaseController : ApiController
{
    public APIClient client;
    public class APIActionFilter : System.Web.Http.AuthorizeAttribute
    {
        public override void OnAuthorization(HttpActionContext filterContext)
        {
            //get data from the database. 
            Controller.client = objectmadefromdb;
        }
    }
}

必须有对这个传递到某处的对象的引用吗?

1 个答案:

答案 0 :(得分:3)

第一条评论是一致的,但不正确。我能够使用以下

来实现这一点
public override void OnAuthorization(HttpActionContext filterContext)
{
    var controllerRef = filterContext.ControllerContext.Controller as APIBaseController;
    controllerRef.userdata = new user("123");
}

我现在能够从主控制器访问属性。我能够在APIBaseController对象上设置一些公共属性,并直接为它们赋值。当然可以使用getter和setter等等。

为了确认它有效,我能够创建一个继承基本控制器的新控制器。从该控制器中的任何操作,我能够访问APIBaseController对象的属性,并使用我在OnAuthorization方法中设置的数据填充它们。