Frage

Ich habe einige seltsame Fehler mit response.redirect() und das Projekt wurde nicht zu bauen .. wenn ich die entfernt try-catch Block, der den Codeblock wurde umgibt, wo Response.Redirect() in war es funktionierte normal ..

Ich will nur wissen, ob dies ein bekanntes Problem oder etwas ist ...

War es hilfreich?

Lösung

Wenn ich mich richtig erinnere, wirft Response.Redirect() eine Ausnahme die aktuelle Anforderung (ThreadAbortedException oder so ähnlich) abzubrechen. Sie könnten also diese Ausnahme werden zu kontrollieren.

Edit:

Die KB-Artikel beschreibt dieses Verhalten (auch für die Request.End() und Server.Transfer() Methoden).

Für Response.Redirect() gibt es eine Überlast:

Response.Redirect(String url, bool endResponse)

Wenn Sie endResponse=false passieren, dann ist die Ausnahme nicht ausgelöst wird (aber die Laufzeit wird auch weiterhin die aktuelle Anfrage ist).

Wenn endResponse=true (oder wenn die andere Überlastung verwendet wird), die Ausnahme ausgelöst wird und die aktuelle Anforderung wird sofort beendet werden.

Andere Tipps

Wie Martin weist darauf hin, Response.Redirect wirft einen Threadabort. Die Lösung ist, die Ausnahme erneut zu werfen:

try  
{
   Response.Redirect(...);
}
catch(ThreadAbortException)
{
   throw; // EDIT: apparently this is not required :-)
}
catch(Exception e)
{
  // Catch other exceptions
}

Martin ist richtig, ein Threadabort geworfen wird, wenn Sie einen Response.Redirect verwenden, finden Sie in der Kbartikel hier

Sie können eine Variable referenziert, die innerhalb des try-Block deklariert wird.

Zum Beispiel der folgende Code ist ungültig:

try
{
  var b = bool.Parse("Yeah!");
}
catch (Exception ex)
{
  if (b)
  {
    Response.Redirect("somewhere else");
  }
}

Sie sollten die b Erklärung außerhalb des Try-Catch-Block ausrücken.

var b = false;
try
{
  b = bool.Parse("Yeah!");
}
catch (Exception ex)
{
  if (b)
  {
    Response.Redirect("somewhere else");
  }
}

Ich glaube nicht, dass es irgendein bekanntes Problem ist hier.

Sie können nicht einfach einen Redirect tun () innerhalb eines try / catch-Block, weil Redirect der Stromsteuerung auf eine andere ASPX (zum Beispiel) verlässt, die den Fang in der Luft verlässt (kann nicht darauf zurückkommen) .

EDIT: Auf der anderen Seite, ich könnte all dies nach hinten herausgefunden haben muß. Es tut uns Leid.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top