MVC 4 Web APIを使用してアプリケーションのサービスレイヤを作成しています。私はAPIへのすべての着信要求に作用するグローバルフィルタを作成しようとしています。今私は、これは標準のMVCグローバルアクションフィルタとは異なる設定が必要であることを理解しています。しかし私は、私が働くためにオンラインで見つけている例を得ることに問題があります。MVC 4 Web APIレジスタフィルタ
私が遭遇している問題は、Web APIでフィルタを登録することです。
私は私のGlobal.asaxのは、このように設定している...
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
MVCConfig.RegisterRoutes(RouteTable.Routes);
MVCConfig.RegisterGlobalFilters(GlobalFilters.Filters);
WebApiConfig.RegisterRoutes(GlobalConfiguration.Configuration);
WebApiConfig.RegisterGlobalFilters(GlobalConfiguration.Configuration.Filters);
}
}
私の標準的なMVCのルーティングとフィルタが正しく動作します。私のWebApiルーティングも同様です。ここでは、それは標準のMVC GlobalFilterCollectionに登録されている場合
public class PerformanceTestFilter : ActionFilterAttribute
{
private readonly Stopwatch _stopWatch = new Stopwatch();
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
_stopWatch.Reset();
_stopWatch.Start();
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
_stopWatch.Stop();
var executionTime = _stopWatch.ElapsedMilliseconds;
// Do something with the executionTime
}
}
このフィルタは正常に動作します... ...私は私のWEBAPIフィルタの登録のために持っているもの
public static void RegisterGlobalFilters(System.Web.Http.Filters.HttpFilterCollection filters)
{
filters.Add(new PerformanceTestFilter());
}
であり、ここでPerformanceTestFilterですが、 System.Web.Http.Filters.HttpFilterCollectionで登録しようとすると、パラメータ型System.Web.Http.Filters.IFilterに割り当てられないというエラーが表示されます。
私は、WebAPIフィルターとして登録するために、私のPerformanceTestFilterがActionFilterAttribute以外のものから継承する必要があると仮定しています。私はそれが何である必要があるか分かりません。
mvcとwebapiでそれぞれ作業するには、2つの個別のフィルタを作成する必要があると思います。両方に登録できるフィルタを作成する方法があれば、それは素晴らしいことです。しかし、私の主な関心事はwebapiのために働くことです。
ありがとうございました
このソリューションは私のプロジェクトをビルドすることを可能にし、標準のMVCアクションフィルタリングのためのWeb APIと "GlobalFilterCollection"の両方に "System.Web.Http.Filters.HttpFilterCollection"の両方にフィルタを登録させました。しかし、私がapiメソッドの1つに移動すると、フィルタは実行されていません。フィルタは、標準のMVCコントローラのアクションで動作しますが、Web APIメソッドでは動作しません。助言がありますか? – jdavis
新しい質問をしてください。コメントに新しい質問をしないでください。 –
@Sam、自分で追加する前にフィルターコレクションをクリアするのはなぜですか? – Vegar