2009-08-26 9 views
7

ASP.NET MVCアプリケーションは、すぐに完全に置き換えられる予定の大きなColdFusionアプリケーションの一部です。私は、ColdFusionの一部のパラメータをクッキーに渡しています。すべてのアクションを実行する前に、この情報をチェックする必要があります。情報が不足している場合は、親サイトにリダイレクトする必要があります。この機能を配置するための最良の場所と、それを統一的に呼び出す方法は何ですか?ASP.NET MVCでベースコントローラから共通コードを配線する方法

現在、ベースコントローラを実装しており、すべてのアクションメソッドでベースコントローラからメソッドを呼び出し、リターン結果に基づいてリダイレクトまたはアクションを続行します。このアプローチはうまくいくように見えますが、アクションに直接関連していないと思って私のアクションメソッドを混乱させます。どうすればそれを分けることができますか?私が利用できるコントローラーのライフサイクルイベントはありますか?これは特定のコントローラ内のすべてのアクションに必要がある場合には

答えて

6

:これはすべてのアクションで実行されますので、

public class YourBaseController : Controller 
{ 
    protected override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     base.OnActionExecuting(filterContext); 

     if(somethingIsWrong) 
     { 
      filterContext.Result = new RedirectToRouteResult(
       new System.Web.Routing.RouteValueDictionary { ... }); 
     } 
    } 
} 
2

は、おそらく使用することができます1つの潜在的オプションが

public class MyBaseController: Controller 
{ 
    protected override void Initialize(RequestContext requestContext) 
    { 
     base.Initialize(requestContext); 

     var cookie = base.Request.Cookies["coldfusioncookie"]; 
     //if something is wrong with cookie 
      Response.Redirect("http://mycoldfusionapp"); 
    } 
} 
2

より良いアプローチは、になります... ベースコントローラでこれを行うだけのことですカスタムActionFilterAttributeを実装し、OnActionExecutingメソッドをオーバーライドしてロジックを処理し、その属性でアクションを装飾するだけです。

public class CheckCookieAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     // Check your cookie and handle the redirect here, otherwise, do nothing 
     // You can get to your cookie through the filterContext parameter 
    } 
} 

public class ActionController : Controller 
{ 
    [CheckCookie] 
    public ActionResult GetFoo() 
    { 
     return View(); 
    } 
} 

これが役立ちます。すでにベースコントローラは、ちょうどそのOnActionExecuting()メソッドをオーバーライドして実装した場合

+1

クルトの答えは、より論理的なようです。それが特定の行動だけだった場合、あなたのアプローチはより良いでしょう。 – Martin

+0

Martinさん。すべての行動に必要な場合は、私はeu-ge-neが答えたものを提案します。私もそうだったが、私は彼の答えを見た。 –

関連する問題