9

私は私のコントローラはOnActionExecutedのアクションで行われた後、いくつかのものをやろうとしています二度呼ばれてOnActionExecuted。 しかし、このメソッドは2回呼び出されます。私はこのフィルタをしようとすると、は、Web API

public class TestFilter: ActionFilterAttribute 
{ 
    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) 
    { 

     //do stuff here 


    } 
} 

と私のコントローラは

[TestFilter] 
    public class BaseController : ApiController 
{ 
public LoginResponseDTO Login(LoginRequestDTO loginRequestDTO) 
    { 

//do login stuff 
    } 

} 

、onActionExecuted方法は、二回の応答に2回適用される方法で自分の行動を引き起こすと呼び出さ

マイフィルタ方式。私は理由を探しましたが、解決策を見つけることができません。

任意のアイデア?

+0

あなたは、両方のTestFiltersは、1つのコールスタックに発射される示し、関連するスタックトレースを提供することはできますか? – Haney

+0

私のコードで同じことが起こっているのがわかります。コントローラ内のブレークポイントコントローラを最初に焼成することonactionexectued示し、次いでOnActionExectuedを二回焼成されます。 – Andiih

+13

私は同じ問題がありました [AttributeUsages(AttributeTargets.Method | AttributeTargets.Class、AllowMultiple = false、Inherited = true)] 私のためにそれを修正しました。残りのすべてのものとして|完璧に働いていた...あなたは答えとして私はそれを投票できるようと言っていたウィッシュ...私は[(AttributeTargets.Class AttributeTargets.Method)AttributeUsage]を追加する必要が私の場合は – Martijn

答えて

12

答えは上記@Martijnコメントからです:

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false, Inherited = true)] 
public class TestFilter: ActionFilterAttribute 

すべてのクレジットは彼に行きます。 (注:回答をコメントとして追加する場合は投稿を削除します)

+0

を – Aamol

0

私にとっての問題は、二回実行するように)私は/ myApi /アクションにリダイレクトされた/ myApi /アクションを呼んでいた/そして、これはOnActionExecuted(原因でした。

私はコードを実行するのに興味がなかったので、FilterContext.ResultがOnActionExecuted内のであるところで除外しました。両方の呼び出しでHTTPステータスコードが200と示されているため、それによってフィルタリングが機能しません。