私は奇妙な行動に出くわしましたが、私がここで正しい軌道に乗っているかどうかはわかりません。
基本クラスOnException
のメソッドをオーバーライドするコントローラーがあります。Controller
public class ControllerFiltersController : Controller {
public ActionResult Index() {
throw new NotImplementedException();
}
protected override void OnException(ExceptionContext filterContext) {
Trace.TraceInformation(
"ControllerFiltersController Exception: " + DateTime.Now.ToString("hh:mm:ss.fff")
);
}
}
次のようなカスタムExceptionFilterもあります。
public class HandleErrorCustom : IExceptionFilter {
public void OnException(ExceptionContext filterContext) {
Trace.TraceInformation(
"HandleErrorCustom Exception Message: " + DateTime.Now.ToString("hh:mm:ss.fff")
);
}
}
次に、それをグローバルフィルターとして登録しました。
public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
filters.Add(new HandleErrorCustom());
}
私が期待したのは、コントローラーインスタンスフィルターControllerInstanceFilterProvider
がグローバルフィルターの前に実行されることです。これは、によって提供されるフィルターの順序がでInt32.MinValue
あり、それらのスコープがであるためですFilterScope.First
。
ここでも説明されているように:ASP.NET MVC 3サービスの場所、パート4:フィルター
しかし、結果は異なります。
iisexpress.exe情報:0:HandleErrorCustom例外メッセージ:06:56:49.972
iisexpress.exe情報:0:ControllerFiltersController例外:06:56:49.974
これはASP.NETMVC4アプリケーションであり、ASP.NET MVC 3のフィルター順序付けの動作に影響を与える変更を認識していません。ここで何が欠けていますか?