2017-02-07 41 views
0

我已经使用MVC 4项目为API创建了一个基本控制器。一切都按我想要的方式工作,但为了提高效率,我希望能够通过OnAuthorization方法从我的基本控制器访问一些自定义属性。我需要执行一些SQL查询以确保访问令牌有效,等等。而是使用此查询一次,并将该对象作为属性存储在控制器上,以便以后可以访问它,而无需再次执行查询。从AuthorizeAttribute方法ASP.NET访问控制器属性

总之,这就是我想要做的。

[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; 
     } 
    } 
} 

这个对象必须有一个引用传递给某个地方?

+0

检查'filterContext.ControllerDescriptor' – Nkosi

+0

不知道它会有多大的帮助,但我做了一些类似于在自定义授权属性中进行数据库调用的东西。看到这里:[SO链接](http://stackoverflow.com/questions/29172150/custom-webapi-authorization-database-call) – MisterIsaak

回答

1

第一条评论是沿着线,但是不正确。我能够使用以下方式获得此工作

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

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

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