我遇到了一個奇怪的行爲,但我不確定自己是否在正確的軌道上。GlobalFilterCollection的過濾器在ControllerInstanceFilterProvider的過濾器之前運行
我有一個控制器,它會覆蓋Controller
基類的OnException
方法。
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
和t他的範圍是FilterScope.First
。
還如這裏解釋:ASP.NET MVC 3 Service Location, Part 4: Filters
但結果是不同的:
iisexpress.exe信息:0:HandleErrorCustom異常消息: 06:56:49.972
iisexpress.exe信息:0:ControllerFiltersController例外: 06:56:49.974
這是一個ASP.NET MVC 4應用程序,我不知道任何會影響ASP.NET MVC 3的過濾器排序行爲的更改。我在這裏丟失了什麼?
現在,我明白了。因此,具有較低值並在動作返回端運行的過濾器將首先運行。謝謝! – tugberk 2012-04-19 17:18:14