我正在创建一个自定义ActionFilterAttribute,以转换ViewResult并在ajax请求期间将其重定向到JsonResult。我已经通过单元测试进行了大部分连接,出于某种原因,我假设我的转换必须在OnResultExecuting中进行,我意识到情况并非如此,并且重写的正确方法是OnActionExecuted,在操作方法返回结果。

我的问题是,由于我在所有四个替代中都具有断点,并且仅OnResultExecutedOnResultExecuting中的断点都在触发,因此何时确切调用OnActionExecutingOnActionExecuted

最佳答案

让我们看下面的示例,该示例执行您描述的转换:

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)
    {
    }
}

将在操作结果的 OnResultExecuting 方法运行之前立即调用 ExecuteResult 方法,并在之后立即调用 OnResultExecuted 方法。

关于asp.net - OnResultExecuted和OnResultExecuting何时确切触发?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10423955/

10-10 05:08