ASP.NET MVC ActionFilterAttribute的执行顺序

理解ASP.NET MVC中ActionFilter执行顺序的实验
本文通过自定义ActionFilter并输出执行信息,揭示了ASP.NET MVC框架中OnActionExecuting、OnActionExecuted、OnResultExecuting和OnResultExecuted四个方法的执行顺序。实验结果显示,这些方法的调用顺序遵循特定流程,有助于开发者更好地理解和利用ActionFilter特性。

http://diaosbook.com/Post/2014/6/3/execution-order-of-actionfilter-aspnet-mvc

ASP.NET MVC里面我们要自定义ActionFilter的时候会发现有4个方法可以override:OnActionExecuting,OnActionExecuted,OnResultExecuting,OnResultExecuted。他们分别在什么时候执行一直是困扰人类的一个问题。我代表人类做了一个简单的实验:

首先自定义一个ActionFilter,每个方法执行的时候都在VS的OUTPUT窗口输出信息:

public class TestActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        Debug.WriteLine("OnActionExecuting");
        base.OnActionExecuting(filterContext);
    }

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        Debug.WriteLine("OnActionExecuted");
        base.OnActionExecuted(filterContext);
    }

    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        Debug.WriteLine("OnResultExecuting");
        base.OnResultExecuting(filterContext);
    }

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        Debug.WriteLine("OnResultExecuted");
        base.OnResultExecuted(filterContext);
    }
}

Controller里为了搞清执行顺序,也需要输出:

[TestActionFilter]
public ActionResult Index()
{
    Debug.WriteLine("Before return View()");
    return View();
}

最后是View:

@{
    Debug.WriteLine("Hello from Index.cshtml");
}

执行结果是这样的,有图有JJ:

1. OnActionExecuting

2. Before return View()

3. OnActionExecuted

4. OnResultExecuting

5. Hello from Index.cshtml

6. OnResultExecuted

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值