gpt4 book ai didi

asp.net-mvc - MVC 5 从 BeginExecuteCore 重定向到另一个 Controller

转载 作者:行者123 更新时间:2023-12-02 07:53:19 24 4
gpt4 key购买 nike

我尝试从函数 BeginExecuteCore 重定向到另一个 Controller 所有我的 Controller 继承了函数BeginExecuteCore,并且我想在发生某些情况时执行一些逻辑,因此重定向到“XController”

怎么做?

编辑:

巴尔德: 我使用函数 BeginExecuteCore 我无法使用 Controller.RedirectToAction

     protected override IAsyncResult BeginExecuteCore(AsyncCallback callback, object state)
{


//logic if true Redirect to Home else .......


return base.BeginExecuteCore(callback, state);
}

最佳答案

Balde 的解决方案有效,但并非最优。

让我们举个例子:

public class HomeController : Controller
{
protected override IAsyncResult BeginExecuteCore(AsyncCallback callback, object state)
{
Response.Redirect("http://www.google.com");
return base.BeginExecuteCore(callback, state);
}

// GET: Test
public ActionResult Index()
{
// Put a breakpoint under this line
return View();
}
}

如果你运行这个项目,你显然会得到 Google 主页。但是如果您查看 IDE,您会注意到由于断点,代码正在等待您。为什么 ?因为您重定向了响应,但没有停止 ASP.NET MVC 的流程,所以它会继续该过程(通过调用操作)。

对于小型网站来说这不是一个大问题,但如果您预计会有很多访问者,这可能会成为一个严重性能问题:每秒可能会出现数千个无用的请求,因为回复已经消失了。

如何避免这种情况?我有一个解决方案(不是一个漂亮的解决方案,但它可以完成工作):

public class HomeController : Controller
{
public ActionResult BeginExecuteCoreActionResult { get; set; }
protected override IAsyncResult BeginExecuteCore(AsyncCallback callback, object state)
{
this.BeginExecuteCoreActionResult = this.Redirect("http://www.google.com");
// or : this.BeginExecuteCoreActionResult = new RedirectResult("http://www.google.com");
return base.BeginExecuteCore(callback, state);
}

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.Result = this.BeginExecuteCoreActionResult;

base.OnActionExecuting(filterContext);
}

// GET: Test
public ActionResult Index()
{
// Put a breakpoint under this line
return View();
}
}

您将重定向结果存储在 Controller 成员中,并在 OnActionExecuting 运行时执行它!

关于asp.net-mvc - MVC 5 从 BeginExecuteCore 重定向到另一个 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36896585/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com