Y at-il quelque chose qui empêche Response.Redirect travailler l'intérieur du bloc try-catch?

StackOverflow https://stackoverflow.com/questions/1063625

Question

Je suis une erreur bizarre avec le projet et response.redirect() ne construisait pas du tout .. quand j'ai enlevé le try-catch bloc qui entourait le bloc de code où était Response.Redirect() en elle fonctionnait normalement ..

Je veux juste savoir si cela est un problème connu ou quelque chose ...

Était-ce utile?

La solution

Si je me souviens bien, déclenche une exception Response.Redirect() pour annuler la requête en cours (ou quelque chose comme ThreadAbortedException que). Donc, vous pourriez prendras cette exception.

Edit:

KB article décrit ce comportement (aussi pour les méthodes Request.End() et Server.Transfer() ).

Pour il existe une endResponse=false surcharge:

Response.Redirect(String url, bool endResponse)

Si vous passez endResponse=true, l'exception n'est pas jeté (mais l'exécution continuera à traiter la demande actuelle).

Si <=> (ou si l'autre surcharge est utilisé), l'exception est levée et la demande actuelle sera immédiatement résilié.

Autres conseils

Comme le souligne Martin sur, Response.Redirect jette un ThreadAbortException. La solution est de nouveau jeter l'exception:

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

Martin est correct, un ThreadAbortException est jeté lorsque vous utilisez un Response.Redirect, consultez le kb article ici

Vous avez fait référence à une variable déclarée à l'intérieur du bloc try.

Par exemple, le code ci-dessous est invalide:

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

Vous devez quitter la déclaration de b à l'extérieur du bloc try-catch.

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

Je ne pense pas qu'il y ait problème connu ici.

Vous ne pouvez pas simplement faire un redirect () à l'intérieur d'un bloc try / catch parce que Redirect quitte le contrôle en cours à un autre .aspx (par exemple), ce qui laisse les prises dans l'air (ne peut pas y revenir) .

EDIT: D'autre part, je pourrais avoir tout cela figurés en arrière. Désolé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top