私はMVCの全体を初めて知り、ASP.NET Web APIを使用していくつかのWCFサービスを再実装しようとしています。その一環として、すべてのアクションと例外をログに記録するアクションフィルタを実装したいと思っています。そのためタイミングは取られていますが、フィルタは起動されていません。ASP.NET Web API ActionFilterの例
public class MyTrackingActionFilter : ActionFilterAttribute, IExceptionFilter
{
private Stopwatch stopwatch = new Stopwatch();
public void OnException(ExceptionContext filterContext)
{
...
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
...
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
this.stopwatch.Start();
Trace.TraceInformation(" Entering {0}", filterContext.RouteData);
}
}
等コントローラで、Iは
[MyTrackingActionFilter]
public class MyResourceController : ApiController
{
...
}
ルートが呼び出しを使用してのGlobal.asaxに設定されている:問題はことである
var routeTemplate = ...
var defaults = new { controller = controllerName, action = methodName };
var constraints = new { httpMethod = new HttpMethodConstraint(myHTTPMethods.Split(',')) };
routes.MapHttpRoute(methodName, routeTemplate, defaults, constraints);
MyResourceControllerのアクションは、期待通りに起動され、正常に実行されます。クライアントは、必要な情報をサーバに問い合わせることができ、すべての動作フィルタメソッドが呼び出されることを除いて、すべて正常に動作します。
残りは「自動的に」起こったと私は理解しました。それは明らかに十分ではありません - 何が間違っているかに関するどんな欲求ですか?これらをどこかに登録する必要がありますか?
注:操作とクラスの両方に属性を追加しようとしましたが、いずれの方法も機能しませんでした。 – WildeButNotOscar
あなたのAPIコントローラ関連のクラスがSystem.Web.HttpFiltersのActionFilterを使用し、System.Web.MvcのActionFiltersを使用していないことを100%確信してください。 –
トップでは、System.Web.HttpFiltersを使用してください。 –