Rob*_*ton 6 asp.net asp.net-mvc
简单的问题.如何在Controller中重写OnResultExecuting方法并强制使用不同的ActionResult?
示例代码如下.目前,原始的ActionResutl继续执行,我的新RedirectResult被忽略.
RedirectResult redirectResult = new RedirectResult("http://www.google.com");
filterContext.Result = redirectResult;
base.OnResultExecuting(filterContext);
Run Code Online (Sandbox Code Playgroud)
小智 10
如果您覆盖OnActionExecuted方法,则可以.
例:
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.Result = new RedirectResult("http://google.com");
base.OnActionExecuted(filterContext);
}
Run Code Online (Sandbox Code Playgroud)
我想知道完全相同的事情.我搜索了谷歌并遇到了你的问题和其他人,所有答案似乎都是一样的.使用该IActionFilter.OnActionExecuted方法.
然而,由于@ randy-burden建议您可以在结果过滤器中修改/替换RedirectToRouteResult操作结果,因此这不是一个真正的答案.那么为什么不是RedirectRoute动作结果呢?
如果您真的想要重定向到IResultFilter.OnResultExecuting方法内的特定URL,那么您可以执行以下任一操作:
RedirectResult redirectResult = new RedirectResult("http://www.google.com");
filterContext.Result = redirectResult;
filterContext.Result.ExecuteResult(filterContext.Controller.ControllerContext);
filterContext.Cancel = true;
base.OnResultExecuting(filterContext);
Run Code Online (Sandbox Code Playgroud)
要么
filterContext.HttpContext.Response.RedirectLocation = "http://www.google.com";
filterContext.HttpContext.Response.StatusCode = 302;
filterContext.Cancel = true;
base.OnResultExecuting(filterContext);
Run Code Online (Sandbox Code Playgroud)
在第一个选项中,您手动执行RedirectResult,并filterContext.Cancel = true告诉框架您不需要filterContext.Result运行它.在第二个选项中,您基本上是这样做的,但不是让RedirectResult配置你自己做的Http响应.
在我的情况下,我想将一个额外的查询参数附加到重定向网址并告诉框架我想取消重定向操作结果然后重定向似乎有点错误但它确实有效.
| 归档时间: |
|
| 查看次数: |
8192 次 |
| 最近记录: |