2017-02-07 66 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方法中設置的數據填充它們。