Asp.net mvc 无法在IResultFilter OnResultExecuting中设置新的重定向结果
有人知道为什么Asp.net mvc 无法在IResultFilter OnResultExecuting中设置新的重定向结果,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,有人知道为什么IResultFilter.OnResultExecuting方法中的以下内容不起作用吗 filterContext.Result = new RedirectResult("http://www.google.com"); 我不是在寻找如何从IResultFilter.OnResultExecuting方法中重定向的答案,因为这已经被问过了,而且我已经给出了答案 相反,我在寻找一个原因或逻辑来解释为什么这不起作用。看起来它应该可以工作,但在MVC3中却不行。除非您设置了filt
IResultFilter.OnResultExecuting
方法中的以下内容不起作用吗
filterContext.Result = new RedirectResult("http://www.google.com");
我不是在寻找如何从IResultFilter.OnResultExecuting
方法中重定向的答案,因为这已经被问过了,而且我已经给出了答案
相反,我在寻找一个原因或逻辑来解释为什么这不起作用。看起来它应该可以工作,但在MVC3中却不行。除非您设置了
filterContext.Cancel=true
,否则原始ActionResult将不受影响地执行。这可能是MVC3特有的错误,也可能是故意的。但是,如果是故意的,那为什么呢?那是因为你已经迟到了,控制器已经被调用了
基本ActionFilterAttribute类具有以下可重写的方法:
- OnActionExecuting–在控制器操作之前调用此方法 被执行
- OnActionExecuted–在执行控制器操作后调用此方法 执行
- OnResultExecuting–在控制器操作之前调用此方法 结果被执行
- OnResultExecuted–在控制器操作后调用此方法 结果被执行
资料来源:我能看出你的想法。然而,当控制器上的操作已经被“调用”时,我想你的意思是执行。这一阶段的结果尚未得到证实。IResultFilter的OnResultExecuting方法似乎是在执行ActionResult之前影响ActionResult的最合适的位置。如果您针对的是特定类型的ActionResult,这一点尤其正确,就像我尝试向所有重定向结果添加查询参数时一样。