2011-02-10 11 views
5

私はAsp.net MVC 3を学習しています。コントローラの他のメソッドを実行する前に実行されるメソッドを定義する方法はありますか?つまり、ベースの "Controller"クラスのコンストラクタのように動作するはずです。一般的な機能を実装する場所Asp.net MVC

これには、ユーザーセッションの確認/ログインページにリダイレクトされていない場合の共通機能が含まれます。そうでなければ、アプリケーションのどこでも使用されるdbの共通値を設定します。私はそれらを一度しか書いておきたいのですが、それぞれのコントローラメソッドでメソッドを呼びたくはありません。

よろしくお願いいたします。

答えて

7

これはフィルタの動作です。一部はすでにAuthorizeAttributeのように、フレームワークで構築があります。

 [Authorize(Roles = "Admins")] 
     public ActionResult Index() 
     { 
      return View(); 
     } 

編集:

フィルタアクション、コントローラまたはグローバルフィルタなどに設定することができます。これを使用して

[Authorize(Roles = "Admins")] 
public class LinkController : Controller 
{ 
    //... 
} 

インサイドGlobal.asaxの

protected void Application_Start() 
    { 
     GlobalFilters.Filters.Add(new AuthorizeAttribute { Roles = "Admins" }); 
     //... 
    } 
+0

は、私が右、すべてのコントローラのすべての方法でこのファイラーを使用する必要がありますか?私はこれらのステップを避けたい。基本的には、 'Controller'クラスをMyControllerとして拡張し、 'MyController'を拡張する他のすべてのコントローラを作成すると動作するはずです。それは良い解決策ですか(私はまだそれを試して、専門家のアドバイスを探して)? – Rana

+3

これらの属性はコントローラのレベルで次のように使用できます:[Authorize] publicクラスReportsController:Controller {}、またはすべてのコントローラのGlobal.asaxにグローバルとして登録します:protected void Application_Start(){GlobalFilters.Filters.Add(New AuthorizeAttribute ()); ...} – tpeczek

関連する問題