2016-04-21 8 views
1

実装IActionFilter:私は、以下のフィルタを構築しています

public class TestflowFilter : FilterAttribute, IActionFilter 
{ 
    public void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     var profileId = int.Parse(ClaimsPrincipal.Current.GetClaimValue("UserId")); 
     var appId = int.Parse(filterContext.RouteData.Values["id"].ToString()); 

     if (profileId != 0 && appId != 0) 
     { 
      if (CheckIfValid(profileId, appId)) 
      { 
       // redirect 
       filterContext.Result = // url to go to 
      } 
     } 
    } 

    public void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
    } 

} 

は私が実際にのみOnActionExecutedが必要ですが、IActionFilter以来、私はそれらの両方を実装する必要がありインタフェースです。何も起こる必要がない場合は、OnActionExecutingを空白にしておくか、MVCが常に動作するベースバージョンを呼び出す必要がありますか?

OnActionExecutedの方法では、CheckIfValidtrueの場合はリダイレクトしますが、そうでない場合は何もしません。それはいいですか、代わりにfilterContextにいくつかのプロパティを設定する必要がありますか?

+1

コードでOnActionExecuting' '移入する必要はありません:あなたは、そのクラスから派生した場合、あなたのフィルター属性コードは少し単純化することができます。 'OnActionExecuted'の場合は、filterContext.Resultに値を代入しないでください。つまり、asp.netは通常のライフサイクルパイプラインを継続します。 – Balde

答えて

3

私は実際にはOnActionExecutedのみ必要ですが、IActionFilterはインターフェイスなので、両方を実装する必要があります。 OnActionExecutingを何もする必要がなければ空白にしてもいいですか、MVCが常に動作するベースバージョンを呼び出す必要がありますか?

この場合、メソッド本体を空のままにしても問題ありません。いいね! OnActionExecuted法でも

CheckIfValidは私は何もしていないユーザーをリダイレクトし、そうでない場合trueの場合は、[OK]または私が代わりにfilterContext上のいくつかのプロパティを設定する必要がないということです。

あなたのフィルタは問題ありません。 MVCには、ActionFilterAttributeという異なる抽象基本クラスが用意されています。これらは、必要に応じてオーバーライドできるようにこれらのインターフェイスを実装しています。あなたはcan read about hereという素晴らしい概要があります。

public class TestflowFilter : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     var profileId = int.Parse(ClaimsPrincipal.Current.GetClaimValue("UserId")); 
     var appId = int.Parse(filterContext.RouteData.Values["id"].ToString()); 

     if (profileId != 0 && appId != 0) 
     { 
      if (CheckIfValid(profileId, appId)) 
      { 
       // redirect 
       filterContext.Result = // url to go to 
      } 
     } 
    } 
} 
関連する問題