私は MVC 全体に不慣れで、ASP.NET Web API を使用していくつかの WCF サービスを再実装することを検討しています。その一環として、すべてのアクションと例外をログに記録し、タイミングを記録するアクション フィルターを実装したいので、アクション フィルターから始めようと思ったのですが、フィルターが呼び出されていません。
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);
}
}
コントローラーには、
[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 のアクションが期待どおりに呼び出され、正常に実行されることです。クライアントはサーバーに必要な情報を問い合わせることができ、アクション フィルター メソッドがまったく呼び出されないことを除いて、すべて正常に動作します。
私の理解では、残りは「自動的に」起こったということでした。それは明らかに十分ではありません - 何が間違っているかについて何か提案はありますか? これらをどこかに登録する必要がありますか?