我使用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;
}
}
}
必须有对这个传递到某处的对象的引用吗?
答案 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方法中设置的数据填充它们。