加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 在ControllerInstanceFilterProvider的Filters之

发布时间:2020-12-16 04:21:28 所属栏目:asp.Net 来源:网络整理
导读:我遇到了一个奇怪的行为,但我不确定我是否在这里正确的轨道. 我有一个控制器,它覆盖了Controller基类的OnException方法. public class ControllerFiltersController : Controller { public ActionResult Index() { throw new NotImplementedException(); } p
我遇到了一个奇怪的行为,但我不确定我是否在这里正确的轨道.

我有一个控制器,它覆盖了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 Information: 0 : HandleErrorCustom Exception Message:
06:56:49.972

iisexpress.exe Information: 0 : ControllerFiltersController Exception:
06:56:49.974

这是一个ASP.NET MVC 4应用程序,我不知道任何影响ASP.NET MVC 3的过滤器排序行为的更改.我在这里缺少什么?

解决方法

这是预期的行为.

过滤器排序取决于信息流动的方向.如果信息流入动作,那么订单就像您期望的那样;如果信息流回动作,那么订单将被撤销.

例如,假设您按此顺序有三个过滤器:F1,F2,F3.假设这些是动作过滤器(意思是,它们正在侦听ActionExecuting和ActionExecuted).系统将运行它们的顺序如下:

F1.ActionExecuting()
F2.ActionExecuting()
F3.ActionExecuting()
Action()
F3.ActionExecuted()
F2.ActionExecuted()
F1.ActionExecuted()

根据定义,错误处理程序是在操作的返回端运行的过滤器,因此它们的顺序是相反的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读