【发布时间】:2012-04-20 00:49:14
【问题描述】:
我遇到了一个奇怪的行为,但我不确定我是否在正确的轨道上。
我有一个控制器,它覆盖了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 并且它们的范围是 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 的过滤器排序行为。我在这里缺少什么?
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 asp.net-mvc-filters