各アクションのロード時にリクエストからいくつかのものをプルする単純なフィルターの作成を開始し、次のような他のスタックオーバーフローからいくつかのコードをコピーしました。
public class TestKeyAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext context)
{
if (context.Request.Properties.ContainsKey("test"))
{
// do stuff
}
}
}
次に、残りの属性を追加しました。
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
GlobalConfiguration.Configuration.Filters.Add(new ElmahHandledErrorLoggerFilter());
filters.Add(new HandleErrorAttribute());
filters.Add(new TestKeyAttribute());
}
実行すると、次のエラーが発生します。
The given filter instance must implement one or more of the following filter
interfaces: IAuthorizationFilter, IActionFilter, IResultFilter, IExceptionFilter.
私が見つけたリンクのほとんどは MVC 3 に関連しており、これは機能しているようです。しかし、私は MVC 4 と Web API を使用しています - 今すぐ属性を登録する必要がある他の方法はありますか?
注意: フィルターを Web API コントローラーにアタッチするのではなく (ただし、GlobalConfiguration.Configuration.Filters に追加すると機能します)、通常の Web コントローラーにアタッチします。
編集:代わりに IActionFilter から継承し、OnActionExecuting を使用することでこれを機能させることができることを知っています。チュートリアルの束がそうすべきだと言っているように見えるので、なぜこのアプローチが機能しないのか不思議です。