我创建一个自定义的ActionFilterAttribute
以改造ViewResult
S和重定向到JsonResult
在Ajax请求秒。 我有线大部分通过单元测试,我是出于某种原因假设我改造不得不发生在OnResultExecuting
,我意识到这是没有的情况下,并覆盖了正确的方法OnActionExecuted
,它立即调用的动作方法返回一个结果。
我的问题是,当究竟是OnResultExecuted
和OnResultExecuting
被调用,因为我已经在所有四个覆盖,只有在那些断点OnActionExecuting
和OnActionExecuted
在所有射击。
让我们来看看下面的例子执行您所描述的转变:
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
后立即方法。
找了一会儿,并试图了解接受的答案,我发现在这之后。 我认为,这显示了执行的顺序是
- OnActionExecuting
- OnActionExecuted
- OnResultExecuting
- OnResultExecuted
下检查清单2.此链接http://www.asp.net/mvc/overview/older-versions-1/controllers-and-routing/understanding-action-filters-cs