When exactly do OnResultExecuted and OnResultExecuting fire?

后端 未结 2 2132
执念已碎
执念已碎 2021-02-18 13:21

I\'m creating a custom ActionFilterAttribute in order to transform ViewResults and redirects into JsonResults during ajax requests. I\'ve

相关标签:
2条回答
  • 2021-02-18 13:53

    After looking for a while and trying to understand the accepted answer I found this. I believe this shows the order of Execution to be

    1. OnActionExecuting
    2. OnActionExecuted
    3. OnResultExecuting
    4. OnResultExecuted

    Check this link under listing 2. http://www.asp.net/mvc/overview/older-versions-1/controllers-and-routing/understanding-action-filters-cs

    0 讨论(0)
  • 2021-02-18 13:54

    Let's take the following example which performs the transformation you described:

    public class MyActionFilterAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            if (filterContext.HttpContext.Request.IsAjaxRequest())
            {
                var result = filterContext.Result as ViewResultBase;
                if (result != null && result.Model != null)
                {
                    filterContext.Result = new JsonResult
                    {
                        Data = result.Model,
                        JsonRequestBehavior = JsonRequestBehavior.AllowGet
                    };
                }
            }
        }
    
        public override void OnResultExecuting(ResultExecutingContext filterContext)
        {
        }
    
        public override void OnResultExecuted(ResultExecutedContext filterContext)
        {
        }
    }
    

    The OnResultExecuting method will be invoked immediately before the action result's ExecuteResult method runs and the OnResultExecuted method immediately after.

    0 讨论(0)
提交回复
热议问题