我正在创建一个自定义ActionFilterAttribute
,以转换ViewResult
并在ajax请求期间将其重定向到JsonResult
。我已经通过单元测试进行了大部分连接,出于某种原因,我假设我的转换必须在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
方法。关于asp.net - OnResultExecuted和OnResultExecuting何时确切触发?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10423955/