的巴爾德的解決方案工作,但不是最佳的。
讓我們舉個例子:
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();
}
}
如果運行這個項目,你會明顯得到了谷歌主頁。但是如果你看看你的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();
}
}
您存儲控制器部件內部的重定向結果和OnActionExecuting運行時,你執行吧!
雖然您的問題缺乏細節,但您可以閱讀有關Controller.RedirectToAction方法。 – Balde