C# 授权属性方法中的ASP.NET访问控制器属性

C# 授权属性方法中的ASP.NET访问控制器属性,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我已经使用MVC4项目为API创建了一个基本控制器。一切都按我所希望的方式工作,但为了提高效率,我希望能够通过OnAuthorization方法从我的基本控制器访问一些自定义属性。我需要执行一些SQL查询以确保访问令牌有效,等等。我宁愿进行一次查询,并将对象作为属性存储在控制器上,以便以后无需再次执行查询即可访问它 简而言之,这就是我想要做的 [APIActionFilter] public class APIBaseController : ApiController { public

我已经使用MVC4项目为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;
        }
    }
}

必须在某个地方传递了对该对象的引用?

第一条注释大致相同,但不正确。我能够使用以下方法使其正常工作

public override void OnAuthorization(HttpActionContext filterContext)
{
    var controllerRef = filterContext.ControllerContext.Controller as APIBaseController;
    controllerRef.userdata = new user("123");
}
我现在可以从主控制器访问属性。我能够在APIBaseController对象上设置一些公共属性,并直接为它们赋值。当然可以使用getter和setter之类的


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

检查filterContext.ControllerDescriptor不确定它会有多大帮助,但我在自定义授权属性中进行了类似的数据库调用。请看这里: