如何从ControllerContext获取Result类型

dev*_*ife 3 asp.net-mvc asp.net-mvc-4

是否有可能获得行动结果类型(ViewResult,JsonResult,等)从一个实例ControllerContext

Dar*_*rov 7

不,那是不可能的.控制器比任何ActionResults运行得早得多.但是,如果您正在编写ActionFilter,则可以filterContext使用其Result属性获取该信息.

例如:

public class MyGlobalActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        var result = filterContext.Result;
        if (result is ViewResultBase)
        {
            // the controller action returned a view result 
            // (either a ViewResult or PartialViewResult)
        }
        else if (result is JsonResult)
        {
            // the controller action returned a JSON result
        }
        else if (result is RedirectToRouteResult)
        {
            // the controller action redirected
        }
        .... and so on
    }
}
Run Code Online (Sandbox Code Playgroud)

请记住,这是有道理的只有一次控制器动作已经执行完毕,又名只有内部OnActionExecuted,OnResultExecutingOnResultExecuted.在此操作完成执行之前尝试验证控制器操作返回的结果是没有意义的.