2017-02-07 10 views
0

MVC 4プロジェクトを使用してAPI用のベースコントローラーを作成しました。すべてがうまく動作しますが、効率の観点から、OnAuthorizationメソッドのベースコントローラーからカスタムプロパティの一部にアクセスできるようにしたいと考えています。私はアクセストークンが有効であることを確認するためにいくつかのSQLクエリを実行する必要があります。 Idはむしろこのクエリーを一度作って、コントローラにプロパティとしてオブジェクトを保存して、後でクエリーをやり直す必要なくアクセスできます。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

check '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オブジェクトにいくつかのパブリックプロパティを設定し、それらに値を直接割り当てることができました。もちろんゲッターやセッターなどを使うことができます。

これを確認するには、ベースコントローラーを継承した新しいコントローラーを作成することができました。そのコントローラー内の任意のアクションから、私はAPIBaseControllerオブジェクトのプロパティにアクセスでき、OnAuthorizationメソッドで設定したデータiが設定されました。

関連する問題