Die Lösung der Balde funktioniert, aber ist nicht optimal.
Lassen Sie uns ein Beispiel:
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();
}
}
Wenn Sie das Projekt und führen Sie offensichtlich die Google Haupt-Seite bekommen. Aber wenn Sie Ihre IDE betrachten, werden Sie feststellen, dass der Code aufgrund des Breakpoints auf Sie wartet. Warum? Da Sie die Antwort umgeleitet haben, den ASP.NET MVC-Fluss jedoch nicht gestoppt haben, wird der Prozess fortgesetzt (durch Aufrufen der Aktion).
Es ist kein großes Problem für eine kleine Website, aber wenn Sie viele Besucher haben prognostiziert, dies ist ein ernst Performance-Problem werden kann: potenziell Tausende von Anfragen pro Sekunde dieses Lauf für nichts, weil die Antwort bereits verschwunden ist .
Wie können Sie das vermeiden? Ich habe eine Lösung (keine hübschen, aber es macht den Job):
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();
}
}
Sie speichern Ihre Umleitung Ergebnisse innerhalb eines Controller-Mitgliedes und Sie es ausführen, wenn der OnActionExecuting läuft!
Obwohl Ihre Frage keine Details enthält, können Sie über die Controller.RedirectToAction-Methode lesen. – Balde