Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 无法在IResultFilter OnResultExecuting中设置新的重定向结果_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

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–在控制器操作后调用此方法 结果被执行
如果要重定向用户,则应使用:OnActionExecuting,它在控制器操作之前调用


资料来源:

我能看出你的想法。然而,当控制器上的操作已经被“调用”时,我想你的意思是执行。这一阶段的结果尚未得到证实。IResultFilter的OnResultExecuting方法似乎是在执行ActionResult之前影响ActionResult的最合适的位置。如果您针对的是特定类型的ActionResult,这一点尤其正确,就像我尝试向所有重定向结果添加查询参数时一样。